|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
. a, c3 ]; F0 x- S `) [; v* [$ v( T
& v& `8 f+ n4 o5 F
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
7 s& ^4 d: t! ] o2 w[mw_shl_code=cpp,true]#include "iostream"+ B5 p$ |+ H$ V4 W8 `. H
#include "vector"
! |) h0 t) P3 g$ ]' s1 P9 r* @#include "algorithm" //sort函数、交并补函数
. O; n, y% \* E# g" ^#include "iterator" //求交并补使用到的迭代器
% e+ F/ w+ T( u/ n7 Z# |using namespace std;4 H- n; u+ j# y, [1 c
/ U$ {% }+ J$ F- z/ S$ D* E
//打印容器vector
+ K- H: X* n& dvoid print_vector(vector<int> v){4 w8 M F$ g/ S1 D
if(v.size()>0){4 k0 N6 d/ r4 A; {8 k/ B' e9 S
cout<<"{";
6 v/ `! a* R- c9 H# T/ l for(int i=0;i<int(v.size());i++){
9 A% {. ~. ?) l6 J" _& H% W cout<<v<<",";
6 R( u7 D6 }. e1 U% x }
- _1 h& r/ q: _/ ^, L0 F* o; _ cout<<"\b}"; 8 C8 W& Y+ x- i. D& U0 d; s
}
1 K- W6 Q- K" W7 w* G5 p i1 B: | else{' i2 P# `2 A9 U2 y6 Y
cout<<"{}";+ E3 N+ r0 V8 @ |
}7 M" E$ i4 S4 Q* `- N* v
}! {+ r$ l0 o7 H: \
5 P* r* M: d1 h5 c; k
//容器vector中元素的去重
. `: S8 c0 o: a1 _0 `. Zvector<int> unique_element_in_vector(vector<int> v){
% `4 a7 v% b( x1 \ vector<int>::iterator vector_iterator;1 A! Y7 e: g& ]0 c+ q8 a
sort(v.begin(),v.end());
% L* W; d9 C# R: m$ T vector_iterator = unique(v.begin(),v.end());
9 p- C! Q6 ? K( w T/ C if(vector_iterator != v.end()){
% n n) i e: } v.erase(vector_iterator,v.end());
$ }3 G: z& }. X% s: V }! q7 {2 q0 Z1 W2 p O
return v;
# p6 P+ x9 C3 g/ P6 ~1 Q2 u8 I}! `) _. _) C. G( |' z" J o
2 n/ Z; ?/ @1 k3 T
//两个vector求交集
; g. H j, y6 p1 P1 ivector<int> vectors_intersection(vector<int> v1,vector<int> v2){
! \1 }! z- p' U( e# r1 g vector<int> v;
( _3 f# z d! N1 l4 N e9 p- f sort(v1.begin(),v1.end());
# F+ S( a: B5 x; T+ a, E) I sort(v2.begin(),v2.end());
3 _5 ?( u, S: [. Y) L set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
4 E" c5 E! f' C" }. y return v;
7 q% E" p# c6 i6 F5 q}% M: H0 _. Y3 {
- f, _) I! K% O0 a! U% B//两个vector求并集
$ P W2 x# v) H; y* [vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
- V4 t9 |: T6 E8 j4 n vector<int> v;* |2 k- w/ Q W( e! r) e
sort(v1.begin(),v1.end());
' O9 F1 f0 M8 j3 R+ n8 s' M& M sort(v2.begin(),v2.end());
4 I0 L3 F, e# [8 ^, K/ C" } set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 _3 J9 y7 b% _- H, a6 N( u8 i7 j4 P4 }
return v;
. M: T! M0 Z* g: x0 I* V}8 q8 ~2 K, ^9 P9 W
. K$ O0 [3 z- }- |: M7 I3 O//判断vector的某一元素是否存在
. A5 C% b$ T' R Ybool is_element_in_vector(vector<int> v,int element){
2 F8 w" n- b2 J7 y vector<int>::iterator it;
7 {: w6 R7 U9 Z/ w( B it=find(v.begin(),v.end(),element);
) ?( J6 N" T, C3 r$ C if (it!=v.end()){
1 e) ]3 L& l) P. a return true;
; J$ u; p& o, t# G1 ? }1 y C7 p1 _& O# v2 S
else{
, G; T; O8 I+ g4 R7 n- T* T return false;
/ x$ g& g, e) g r3 l: a }' I% X- `6 O* d) x
}
@( Z* L( F" ^. Z" q" M
( q0 k7 c) D% u, Nint main(){- b( o0 D' o3 ~9 y! K% B
vector<int> v1,v2,v;
& `' s" g+ o* V- p* W v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);" ~: {' \; B- M' \
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
2 Z+ l# J* H/ I; ]9 s7 ]7 ?& m cout<<"对v1去重:";
$ @" c3 R3 U P$ Q# [, P& a; ? v1=unique_element_in_vector(v1);- {7 A" u7 v6 P+ Z) S% l0 j; d
print_vector(v1);5 x7 F4 f% X, G1 h6 f
cout<<endl;
/ o; _7 r. {7 K5 M3 @& O; V% u cout<<"求v1与v2的交集:";; v* g; d, A$ l$ s5 q
v=vectors_intersection(v1,v2);
4 I$ m9 U* { d8 }$ q! _ print_vector(v);& u- \1 o" h, _2 @
cout<<endl;
* W, [. m: i6 W8 h7 p+ ` cout<<"求v1与v2的并集:";
8 ~; X- Y( C; Y. z+ U% Z' M/ f v=vectors_set_union(v1,v2);
" h% G4 C% z- s# X0 M: } print_vector(v);6 {( ], C2 Y+ k M. T& Z/ v& A
return 0;4 M6 h8 `3 z: ~2 e5 f* R- V
}[/mw_shl_code]
. S! O; ~0 J8 m2 S6 F |
|