|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) x8 S% x! o J$ O: R8 l9 [
& s+ L% ^* S+ }, N: s, R0 s
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:+ P; Y/ e9 ^, ?6 V; |8 R
[mw_shl_code=cpp,true]#include "iostream"5 e @6 T5 k) I* X0 |0 U
#include "vector" 9 i( |. J& z5 c! [7 F
#include "algorithm" //sort函数、交并补函数$ q. \' S3 j- @ q, U3 f
#include "iterator" //求交并补使用到的迭代器
7 u. B1 r: c# M: Dusing namespace std;
2 \, C( @# u3 v9 {# s a, f) u% a1 T" o" y6 G* v+ i
//打印容器vector
3 `9 F: Z6 y) X+ {1 b+ r. A: P6 ^% L8 jvoid print_vector(vector<int> v){: Y+ S' T' h' F. r0 Q+ ~ X6 J
if(v.size()>0){1 s" D7 M- E f" z& ?# O0 d H
cout<<"{"; : Y; N( Z; B: R {% U% f+ o
for(int i=0;i<int(v.size());i++){ % `. K# _0 n1 h7 G* ]
cout<<v<<",";
5 l2 _" i$ M# Z4 p0 Q3 A }
1 b% [$ R# y: K, [+ G5 J cout<<"\b}"; ( ~. j1 Y' n2 c* J
}% l1 h* D8 N, e# T. F
else{2 f0 p/ s7 N" u. Q% |* J
cout<<"{}";% A W* b1 h' [+ @! L7 l* D5 P, R
}
" h1 B2 w, @5 |}
3 j: J8 w; C; w" |% S `: k, S
" A/ Z$ F& [$ T- E# l( [//容器vector中元素的去重
/ i. A! P, F1 b1 _* R9 Jvector<int> unique_element_in_vector(vector<int> v){
7 T4 ^2 ~! C* ]0 O: E vector<int>::iterator vector_iterator;& D7 P, @5 C/ `: o3 y U' M
sort(v.begin(),v.end());
) n7 I9 H# i% B; n! K0 Y8 Y& }* `3 p vector_iterator = unique(v.begin(),v.end());! l/ V8 _4 |2 w( U: n
if(vector_iterator != v.end()){# ]( Q) f) a2 A4 X* x7 Y* i
v.erase(vector_iterator,v.end());
% \$ F# h5 W6 c$ E% J8 b" o p }
- e$ J& j" M$ ^4 F! u; s return v;) L' ] R$ c/ b- R7 h: Q" F2 E
}
' J9 ^0 X+ M& {' Z1 m- X) M
) m% c$ j$ k2 l3 M$ `( P8 i! S//两个vector求交集
9 i' ~, P' e5 s# B5 J# x" W" P3 Cvector<int> vectors_intersection(vector<int> v1,vector<int> v2){/ ~3 G E' q# _, X9 Y$ S4 v
vector<int> v;
5 Y$ S2 l j, h) X+ l% C; Y sort(v1.begin(),v1.end());
' o7 g6 S w# L$ _$ B sort(v2.begin(),v2.end());
! a/ \9 }' P! g! f; ^" G- _) O set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
+ U! K' i1 E2 G$ u* H return v;
$ q) ?; v) t* Q6 `8 s3 U}- K2 _, i: M* K3 [
. f% ~( k7 J( u: ~: Z- e" C
//两个vector求并集
5 K% z3 Y) v9 d9 Q; G/ [- v; xvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
. B! S0 P) U/ K( d3 C vector<int> v;
" t n }6 l+ {3 D( d5 \ sort(v1.begin(),v1.end());
9 b! }* y* ?7 _& W$ G! g; M- U9 U9 a sort(v2.begin(),v2.end()); 2 W) |8 |5 I5 M7 {& d' a3 \
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) z5 \4 o3 h: R" j0 G1 k) T return v;
% D& d4 l+ k9 T0 p' x}
* K) O. [: O0 ? N* G9 p
$ K c. n# }" V5 N//判断vector的某一元素是否存在
* ?% o% o/ R3 r5 V* Cbool is_element_in_vector(vector<int> v,int element){# G9 ~1 T0 L3 C! e4 O; R
vector<int>::iterator it;
% I5 P# q: Z6 C it=find(v.begin(),v.end(),element);
1 f9 ?3 b6 J J: z1 A& N if (it!=v.end()){1 r: O4 s- Y3 _( ]$ N5 X
return true; b5 Z) A E5 e+ |( R0 N
}$ n( p1 l. c( d o
else{2 j+ b+ ~1 o K) ^5 v
return false;
6 A! P$ P! Z- @- z& f3 h- ] }3 B1 N( j" K3 N8 H
}0 G. C+ u- b; y8 n4 `6 z
- Y' {( ]9 a" j! m# A9 ]( p$ b7 Nint main(){
/ `+ D0 u7 ?4 H8 c5 Y- [+ M& i vector<int> v1,v2,v;' V) e# ?: N. `; B8 }6 H
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
- m/ ~' }3 \6 ~1 z& @8 C cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
% C! e9 T0 f' r9 h7 h4 }5 B3 K- A cout<<"对v1去重:";# }: T4 P+ E* P* ^/ V o* T' m
v1=unique_element_in_vector(v1);2 ]* t; z0 X. |% t" W
print_vector(v1);
; n' a/ t0 E( Q cout<<endl;- i4 G' e) B d, r/ o
cout<<"求v1与v2的交集:";
, |; V- l' s8 q8 r* |3 @ v=vectors_intersection(v1,v2);1 u! S, n# A7 {8 X
print_vector(v);
1 k, a5 |9 }+ w( s cout<<endl; b, x1 e! m9 d5 C9 [. Q# V" Z
cout<<"求v1与v2的并集:";' {0 a; f1 J/ Q1 z3 s: ^2 G
v=vectors_set_union(v1,v2);
9 f# c k$ Y4 Q/ h print_vector(v);8 F. p7 S9 F d4 x# }/ H) i' ?
return 0;( L, V6 y7 ~5 {3 G5 m/ F
}[/mw_shl_code]
+ y. x8 Q6 L+ ]% W! O |
|