|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
4 D4 V1 v' s# {) q0 ]5 j
7 W! s, q( |. SC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:3 x b7 s0 b* e0 e8 E1 h
[mw_shl_code=cpp,true]#include "iostream"7 r4 `. U. a% O" D6 v, k$ A3 P
#include "vector"
5 e) n ^" \ S, \0 f) e#include "algorithm" //sort函数、交并补函数
1 V) v- U% X6 W- w, E#include "iterator" //求交并补使用到的迭代器
$ x0 ^( H9 W+ G( Pusing namespace std;+ L& J9 V: x. i5 d( v* _3 c" R& V
4 c( F, G1 b2 S. M! q/ f//打印容器vector* D% ~" C* R3 A
void print_vector(vector<int> v){
" U) M7 \9 f8 d; e+ u f% Z! X if(v.size()>0){
: L% l$ j( i$ o1 K cout<<"{"; , ?: j0 U0 _) y! A: V
for(int i=0;i<int(v.size());i++){
' ^ h1 O# e( ~/ i4 l. p) n B* |8 k cout<<v<<",";
6 A' H$ K9 X" ]6 {) \% w0 X } * u+ Y! ~( O9 c1 h
cout<<"\b}"; 7 ^) C3 G* K) \# j z% W
}2 S- s0 l3 E* o8 d
else{6 _# k2 ]: |: Y V$ J5 q+ u% v
cout<<"{}";
& t) y( [2 U) x0 q4 v y }
9 [8 y" T8 o6 z}
- p2 W" J2 \8 C# o' B
- ~' L0 `. ]9 ~; Y9 T5 J: V3 p//容器vector中元素的去重
7 @2 S1 |0 `, i( P, O9 M2 R7 Jvector<int> unique_element_in_vector(vector<int> v){0 l9 Y( ]+ K3 O; t/ h$ E% `
vector<int>::iterator vector_iterator;
" l3 w3 A/ g U0 s0 l' F sort(v.begin(),v.end());, |4 A- ~5 C! z& Y7 h
vector_iterator = unique(v.begin(),v.end());
Q2 m* v2 V2 D( t" a$ Z if(vector_iterator != v.end()){
h) ]" u8 a+ {5 ?! z7 p Z v.erase(vector_iterator,v.end());
6 \" e( s& H, P }
8 l5 C5 w/ X/ n7 S' M, g return v;* T7 e5 \5 g5 z3 U
}: A2 s3 N1 d% @' p8 R' c
- ~8 O* l1 J2 H. q5 s$ { K# c& U//两个vector求交集
/ S X' R1 z0 S: wvector<int> vectors_intersection(vector<int> v1,vector<int> v2){, X+ d( Z. e6 E5 n$ D
vector<int> v;
9 ] _ d/ ?) }- h; l7 B sort(v1.begin(),v1.end()); # D$ M! x) E0 L; T
sort(v2.begin(),v2.end());
) q& n0 X6 Z# c* A# x! T( h+ z set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
; O/ V- P% k! P1 D% U0 |: r return v;3 E- P, u! W3 q' ], T1 L& V
}$ m: c4 D; {# B8 E: m) \0 Q G
) l! W, q; r" e; C! A//两个vector求并集
) f3 X2 H* i6 Xvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
7 K" g1 M( `% x- s vector<int> v;
5 _7 E2 I$ r& E sort(v1.begin(),v1.end());
% A8 T- \2 _( l y& |' g+ C sort(v2.begin(),v2.end()); & R) H9 l( S/ i5 _9 }1 l' }$ A
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
2 n: @1 d9 e- s+ r- N. E return v; z& X/ n( ^: @
}( v1 g) @* a, w3 ?" `
; H) y( J4 p% i1 y1 [" t//判断vector的某一元素是否存在2 O0 K. F4 N; T% N7 |
bool is_element_in_vector(vector<int> v,int element){, L: }$ R8 N) a0 F" Y# L
vector<int>::iterator it;1 y7 P a X) t# t4 R
it=find(v.begin(),v.end(),element);
0 I! u: f1 q4 \" Q* |) A if (it!=v.end()){) i0 n. P4 o) a5 i4 ~# w" z" r
return true;
( a: @9 A# m# F% K) t) A4 I- Y( v) p3 n4 @ }
3 K: C3 J- S3 w/ Y# D9 X else{
1 u/ g; z- c7 d) P; n8 T9 q return false;# B/ L8 {* e3 z& K
}
: f0 Y! r$ Z% w( B1 H8 @# k. s8 Q}
" b1 c; t0 F8 Q/ j( N
. z+ d2 R! W d5 n# m% G4 Hint main(){2 _" W/ ]/ u# p4 v% C% i( h t: M
vector<int> v1,v2,v;& g5 s4 |5 `. Y
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24); ?& J b; ]) l& v
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
6 F! h7 ^# i$ h# @3 ? cout<<"对v1去重:";
7 j/ q) P1 C2 y) a: h v1=unique_element_in_vector(v1);
! ~) `" Y& O! Q print_vector(v1);7 f6 f- |/ d* z
cout<<endl;
@( Z. C! c$ v5 U cout<<"求v1与v2的交集:";, e8 d* p9 L- E5 ]" l: H8 L
v=vectors_intersection(v1,v2);
. i" p$ I& z0 v) ]' o$ s4 W& o print_vector(v);: d0 G# H+ M8 ?
cout<<endl;; a5 v2 D$ y5 t1 i0 O
cout<<"求v1与v2的并集:";
) ?: ]/ a- a0 l& @" t* g v=vectors_set_union(v1,v2);
! B! H4 @/ F5 m, B print_vector(v);: O9 _( m: @, w T5 ^ n8 y
return 0;% l( |3 n6 c5 d
}[/mw_shl_code]
8 h5 t p9 C, {- J6 v$ d |
|