|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
, h) ^/ \) ^4 g4 A7 Z! w
+ ^* K# V1 y+ u+ Z3 ~1 @6 p1 cC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:/ w* \+ Z$ m0 A% c* g
[mw_shl_code=cpp,true]#include "iostream"8 T2 ?" C2 G( {" M8 V( L
#include "vector"
" ^: [7 `, z7 t/ O4 d* G: w#include "algorithm" //sort函数、交并补函数# H0 _' q1 `3 ]' E$ r, b
#include "iterator" //求交并补使用到的迭代器
# j4 b J& q4 e3 @. S1 Pusing namespace std;
/ t$ n d! B8 _ R
. [" z* |7 g5 T1 y' h& ~//打印容器vector3 T5 g- T3 b; ^) W) o4 B: w- r
void print_vector(vector<int> v){
" Q2 {3 L8 i4 y4 J% k9 b, w t8 f if(v.size()>0){
& Y6 R1 `% z: \% @ w, c9 \- i cout<<"{";
: B2 `0 _% j, N3 Q7 ? for(int i=0;i<int(v.size());i++){ 3 d u X5 R8 N0 k* ]" P/ o! e9 K
cout<<v<<",";
9 [* j" p$ ^5 k } , S) `2 R0 G2 j7 I
cout<<"\b}"; ' |3 s, S+ ?7 O. L# K* o
}
) `8 E) x3 v( T* `& [& D5 {4 j/ u else{
3 i% b& P! }/ J0 I, E cout<<"{}";
2 `' ~& d. @# q }
; L% x$ ^4 B0 `: W4 j$ u}
6 z) j- B: L& n% z 3 r" l) l3 s* I$ n
//容器vector中元素的去重
9 n1 t! r; [- Hvector<int> unique_element_in_vector(vector<int> v){* M$ K. s/ O8 D: w$ G) J
vector<int>::iterator vector_iterator;; }8 N6 B+ [" q
sort(v.begin(),v.end());% L+ X/ ]/ @" u0 }5 k0 n
vector_iterator = unique(v.begin(),v.end());
S) S6 g8 ]# j3 X/ m if(vector_iterator != v.end()){
3 Y. s# u) p) x. W) F* c v.erase(vector_iterator,v.end());
0 B. d, J" O' h+ W0 j }" N8 n3 s* W& I2 _7 j
return v;% v* Y# ?5 @7 N3 t4 Y
}- R4 {; K$ X$ n) a
) u! O4 d. F1 a: g5 K3 \6 q' A* ^//两个vector求交集
' N" t7 l* p Z: t: [; Xvector<int> vectors_intersection(vector<int> v1,vector<int> v2){" q; X0 a, c0 c I; ]- N
vector<int> v;3 N; f& h O& {; g! V7 O+ k# M
sort(v1.begin(),v1.end()); * K5 I1 I) A( d5 o! I& A X# F
sort(v2.begin(),v2.end()); : M6 C" m8 T, e
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
; S* N* }; A" m return v;+ S6 a/ w U3 z
}8 Z0 H, s* ?6 v: ~
/ G& _& j& r' [, ^" b D6 ^
//两个vector求并集# L% |. o6 Q5 ~
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){* ^5 ^' U; W8 m" l" L* ^& r
vector<int> v;
: v0 _2 w1 Z5 Z* g7 f/ @0 H0 U sort(v1.begin(),v1.end());
$ i# v; Q2 | Z4 X$ b! N/ x( k- P, M sort(v2.begin(),v2.end());
2 \$ l) x/ b+ ~7 K0 f3 E set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
' b; w" O B: F- n+ Z. R5 m return v;8 d2 z# U9 |0 l2 F5 k& I; R: O, H
}
; {: E) R* z$ v# m) m, G " d4 X. }5 Y7 t }4 m6 w2 p
//判断vector的某一元素是否存在
- o% o2 h3 K7 n. |0 ~2 Ybool is_element_in_vector(vector<int> v,int element){0 d! ]) p8 F' N: |# n9 o
vector<int>::iterator it;
8 W2 h o' ^) K it=find(v.begin(),v.end(),element);
% S% L3 i" o6 p if (it!=v.end()){* M3 Y: `" K: [3 \3 q
return true;
2 e5 Z$ w+ K( p1 T& c }
1 T, ?+ k; L4 [ else{3 B( h1 m( L0 E t7 j, M5 }
return false;
! q" H8 h# r* b7 Z }
2 L0 g# R& n+ k2 W}8 B; }7 l: G8 G! {% W. n
& W) Q! N+ L$ C: l1 mint main(){$ H" d; f0 x+ b: D+ G; C, I
vector<int> v1,v2,v;6 A7 P2 q/ P5 e4 D
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);$ l" v& x: G+ s- y# j8 m: W) W
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- \0 n' u' K* z, B# h
cout<<"对v1去重:";
- l' T2 D! `% d v1=unique_element_in_vector(v1);5 ?- D/ m' `3 }# Y( @- p Z- S) I
print_vector(v1);
$ |5 y+ M6 ]( u% l cout<<endl;
J5 c: J0 J( G cout<<"求v1与v2的交集:";8 _$ v, ^9 o1 y& G3 Y$ E& g
v=vectors_intersection(v1,v2);
( |4 f4 L7 d) l+ R" c print_vector(v);% R/ J) z8 t, O
cout<<endl;
& m7 A6 \7 w5 E cout<<"求v1与v2的并集:";
: {, C( p/ b; x `# B v=vectors_set_union(v1,v2);
5 B+ r. a m) C, Q* d/ j1 |8 L+ q! W print_vector(v);4 M2 m0 t0 `5 L# \+ E2 x) O& x
return 0;/ g o: Y, d- E) B- i+ l
}[/mw_shl_code]/ ?7 B# M$ d! r1 r
|
|