|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: }0 R- O1 \0 h. r" [& H" P
& ?6 x* g4 x0 N5 ~C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:4 c& K4 Q& o7 }
[mw_shl_code=cpp,true]#include "iostream"
1 ]% |5 E. g1 P! }5 f4 p4 C4 B#include "vector"
- L- L/ a) k% b4 ?' n- V#include "algorithm" //sort函数、交并补函数 z8 d+ i8 }4 H. E* P
#include "iterator" //求交并补使用到的迭代器
# \3 {* M* \# ausing namespace std;: L3 F, B# b5 e1 y* a+ Y6 ~+ J
7 P2 F K- e& n+ }' H( t$ u. w( q" c//打印容器vector
; r' v; \* S6 Z2 y' _void print_vector(vector<int> v){; Y+ N$ E, j% Y# l
if(v.size()>0){6 Q( W& U% n7 s# M% b) H. ^! J
cout<<"{";
9 q% y. f. R' U* N$ p; B/ L' R for(int i=0;i<int(v.size());i++){ 3 g& ~6 K9 K6 L$ p6 d
cout<<v<<","; ( i4 O; x% a' j0 _9 I- ]$ e
} ! f3 t9 r, c2 Y3 H w, n
cout<<"\b}";
6 V0 z! D0 a( ]8 S }
* h }3 c$ |2 Z! J0 }$ ~7 n$ x else{
, j+ m0 D5 u& N cout<<"{}";+ M& V# X0 i4 w3 @# r$ I: C
}
7 U& s# _ P! u1 Z}7 ]4 p* x* l$ j2 Z6 @
8 ?/ X) {" f7 H1 V
//容器vector中元素的去重, K$ V$ C' l' F+ E( }" O
vector<int> unique_element_in_vector(vector<int> v){
! h: Z6 H; p" [+ O7 O' p vector<int>::iterator vector_iterator;0 L# _' u k" L8 B4 h
sort(v.begin(),v.end());# v$ U: d* I! D/ `
vector_iterator = unique(v.begin(),v.end());6 A6 L; k5 }* Y2 Z( V/ E/ {( K8 ~7 p
if(vector_iterator != v.end()){
) m* _9 j V2 `; m. R! s& B v.erase(vector_iterator,v.end());7 _6 L z4 Q3 ]& U8 I
}
7 R( n1 ]/ g4 {' o, P6 t2 @ return v;
0 ^, p N8 V- e+ \; u8 V; A) g) Z}; K; W9 N4 w3 R0 g
, y/ ^1 t, s5 X8 p//两个vector求交集
( p" |/ c, r/ \* K( F0 lvector<int> vectors_intersection(vector<int> v1,vector<int> v2){; ]: @1 i/ g9 S2 ~. C
vector<int> v;2 \. W$ O4 h' v/ X
sort(v1.begin(),v1.end());
0 P" e' R; l7 Q/ m sort(v2.begin(),v2.end());
' p0 m/ x! v! F( X$ y# X set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 H) n; N$ e% c* j1 [
return v;
( c( J: m9 }- V, }! H$ H% J}$ k" |7 Z" I' S9 B5 d. p
6 H1 |3 t9 N! \+ s6 F$ U//两个vector求并集+ N& ?2 Z' I+ b" _
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){, c: b! M0 ?6 s1 {
vector<int> v;
9 D6 I9 U! _9 n$ s# ~$ m$ Q sort(v1.begin(),v1.end());
9 l6 M: A* a/ W1 A. i( r' v6 R9 b4 O sort(v2.begin(),v2.end());
/ @" H8 S6 Y, {" m$ r set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 % M" K, M& }; f4 U$ t
return v;
6 {$ s, m" ^. A. G* M1 c) ]}: a% E5 W/ ^' Y3 v, P
7 d' k# w% Z9 m/ T `! j6 S
//判断vector的某一元素是否存在 l; R+ G w1 B4 B
bool is_element_in_vector(vector<int> v,int element){
9 `7 k- e; }8 h, i* S }8 H/ N vector<int>::iterator it;+ D1 A" \& Q9 b( K& s9 E: |" G$ s
it=find(v.begin(),v.end(),element);
* O) \2 E( ]6 S, y! R if (it!=v.end()){) ?/ \, P: V1 m$ I
return true;# `- M2 S& I: ?- x$ d2 P
}. a! d# c$ `4 v, H; `' }
else{/ T; a- C, V2 g. y
return false;
: }& [+ ~2 i/ Y& v' C K }4 |8 s7 t/ q2 A3 v, a
}; Q( B. F: I# o. A% l% ]# b
& H" H1 {4 x% Tint main(){$ b1 {7 R# \% R& @: _
vector<int> v1,v2,v;* P) l& Z: @# k+ |& A& i/ N
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
& f7 q1 v3 U$ k' y4 h cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;. x* p4 A; i! G
cout<<"对v1去重:";
! V' t* \; U8 B7 d v1=unique_element_in_vector(v1);
/ p" a1 G9 k& B) ^% V print_vector(v1);
8 p. D+ q+ { t* P cout<<endl;
+ z3 [' y9 q v+ L# L( x5 _ cout<<"求v1与v2的交集:";: m! R. C$ l7 l1 m) ~. W2 L
v=vectors_intersection(v1,v2);
7 {# d e7 |3 s# x3 j. ] K print_vector(v);
3 w, f6 ~; X! U' v cout<<endl;, H4 U. C# t# K8 E6 a
cout<<"求v1与v2的并集:";
3 h" T1 v: Z9 q5 e v=vectors_set_union(v1,v2);
( S5 F7 a3 o5 d3 q print_vector(v);8 |! i' Q3 e2 Z
return 0;
( m. `5 H B* X! ~) d# p+ ^, q: i. ^}[/mw_shl_code]# X. o' C. R6 ~1 ]& k0 \
|
|