|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% D6 y! I( X7 @) c
! \0 q/ C9 j( e7 o- _
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:# Y2 Q$ t" v6 T
[mw_shl_code=cpp,true]#include "iostream"
$ n. p0 L) _( ^#include "vector" / l) ]+ S1 C" ?9 b5 `/ \" ~# g3 I0 ` |
#include "algorithm" //sort函数、交并补函数
, B9 T* q0 x& L- W, v& [#include "iterator" //求交并补使用到的迭代器
; K% O- i! _( a+ ^4 Cusing namespace std;
n% R k U* z( [+ V% O8 Q# F+ L9 N! z . z9 i: K8 }0 p3 C5 O- W( H
//打印容器vector
2 C6 r! q3 ~6 w/ m* i) k( Jvoid print_vector(vector<int> v){
, u$ M1 u/ _6 M if(v.size()>0){
3 Y5 l- n, u0 A cout<<"{"; , u$ c2 _9 k* G
for(int i=0;i<int(v.size());i++){ . g, i1 Y& M2 ?
cout<<v<<",";
4 w/ G( [2 x2 u9 K* T }
: H; ~5 a, e' @' q* H cout<<"\b}"; / T9 }$ }6 E" U. E n
}
4 x. e) Q: L O else{! I! O/ F* e5 g0 {5 `3 }
cout<<"{}";
: O" ?- O/ L' K/ H }6 o- K6 F) b3 l6 _/ G# Q F
}1 D0 P8 S. z& C1 @5 f( g
! x3 N) M2 W3 E; t
//容器vector中元素的去重. |9 A! S1 E- N3 i0 B6 s+ F
vector<int> unique_element_in_vector(vector<int> v){( d; `; `& _) J" w; D* D4 o
vector<int>::iterator vector_iterator;( X( p8 X5 s' b0 `! e3 t7 c% w
sort(v.begin(),v.end());) u( D5 S+ E5 t6 }3 J
vector_iterator = unique(v.begin(),v.end());6 x: \; |) s8 B! ~+ ^1 ~2 r
if(vector_iterator != v.end()){7 f1 t; s( r1 p! |' q+ i% }0 T
v.erase(vector_iterator,v.end());% C2 n# G3 e& h) H6 g
}) { X$ i' i0 o3 r
return v;$ N1 v' i$ @1 v8 Q* C O8 I
}
# ~ n% C }) s0 _" y" T
^* D# M4 S- K' Z% l//两个vector求交集7 K& n9 [) s) o' o+ A
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
/ c S( }! L2 C' x! o6 p; `9 L M vector<int> v;, }$ @) A6 Z& }; \* t& `
sort(v1.begin(),v1.end());
2 T: r; {1 p0 Z$ {3 h2 Q) s) t% i sort(v2.begin(),v2.end());
1 i7 a6 @2 U8 K& G v6 m3 N, R9 n/ D set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
& w" f$ i' q' J$ _: ~ return v;
$ v3 r8 [& K' ^; c}. d3 r% z' p- i, o4 @3 V
4 u2 N( x1 F {1 O6 S# f6 F//两个vector求并集
: {0 _: w% N& V9 ivector<int> vectors_set_union(vector<int> v1,vector<int> v2){% S- g1 D; q' R' z4 }. P7 f
vector<int> v;
, O0 D6 ?3 E0 X sort(v1.begin(),v1.end()); 0 a& z2 t6 { j& |
sort(v2.begin(),v2.end()); * K- T7 t* D- B- n
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 " F3 }. L; e( x% i
return v;
9 h1 r# _( T) e5 \# V* W: A' D}& w# D3 ^" Z9 _+ |6 t7 H
0 m- J# |( v, G: ?9 O5 R
//判断vector的某一元素是否存在6 Q& m k |: a, r$ j# s& u
bool is_element_in_vector(vector<int> v,int element){# w0 i3 w; a z5 r7 K/ o
vector<int>::iterator it;' _* @) V8 d" V0 i
it=find(v.begin(),v.end(),element);
: B6 }( y& n3 g9 b$ c/ J if (it!=v.end()){
} A3 o- A8 t$ F# g k return true; x/ D; t8 P; i" a. i6 `
}% y* a+ U& z$ c& k
else{" U+ k7 B+ _) B8 c8 S' c
return false;
2 e) V2 j/ ~3 ]0 d }* v F% { e, w4 i1 V2 p- P
}
+ d( I. U# K- V# S7 T) W
# |( o7 |6 R! U' m) qint main(){
4 c% H* ^$ B! ?6 z vector<int> v1,v2,v;
" l( M3 m* |9 g% P, u' D% s/ [ v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
4 x$ q( n' a9 {' S cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
. J( ?0 D+ L4 z7 W cout<<"对v1去重:";
" B( n) x! ?9 U: z! W: M8 G v1=unique_element_in_vector(v1);% d: s6 f2 t; @- M6 J/ P
print_vector(v1);
$ a/ {& w/ u8 r1 \( k cout<<endl;& Q& m1 e- z1 i6 v8 H H% L0 o; v
cout<<"求v1与v2的交集:";; K" ~/ K' D4 m I9 Q" a. P
v=vectors_intersection(v1,v2);! L+ p- C) o2 g2 l. H+ n
print_vector(v);! |2 D' v7 q! m4 Q% ]
cout<<endl;7 q! z) H0 c4 y; A9 ?
cout<<"求v1与v2的并集:";9 g6 P( X& A" B" v
v=vectors_set_union(v1,v2);
: c- J5 A4 M6 E. I2 h, T print_vector(v);& [& F8 e% A% N8 R2 o. o' X: p6 o8 ~( z
return 0;
* ~. a( A- Y) _9 d2 M; U}[/mw_shl_code]# p& S0 \$ W9 ?9 f- _) l: s* l( F
|
|