|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 B" R- \, W4 U! W( q0 ]
0 e; T% C8 @2 n
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
9 I, Z; E$ s$ K6 M- j[mw_shl_code=cpp,true]#include "iostream", W5 S* m9 a9 f! a
#include "vector" 9 a o# k- q. Y/ E
#include "algorithm" //sort函数、交并补函数
- h+ l1 c8 u+ a" w1 z% N |" E#include "iterator" //求交并补使用到的迭代器2 q2 K1 }! P, b* P0 Y
using namespace std;8 \0 i1 i( ^5 L3 z; j
2 g" |& M: d! W8 v* a# @, K
//打印容器vector
) Q$ X- t# b n) i+ Jvoid print_vector(vector<int> v){
* \6 X/ m' F. T/ C7 c/ a5 K/ Y if(v.size()>0){
5 q6 g8 A4 ~, O! J cout<<"{";
- n% |% B5 X2 F8 L6 C& f8 I6 J( s2 D for(int i=0;i<int(v.size());i++){
6 `7 s" Q) W) h* Z: q; V cout<<v<<",";
9 [! Q$ T9 _( c } 9 u3 \2 ?8 M! Z5 L7 O. C& c9 M2 V$ Q
cout<<"\b}";
* a% T2 t" ^, `$ E }* u! @ k5 M/ y3 w
else{2 M3 m5 \: T1 H+ ^& \- ^1 j
cout<<"{}";
4 C6 F/ l u j( v }& n$ J& B6 z, c6 N& N" p$ M
}- E/ p( v7 r8 b2 k9 q
' P9 a6 K% M( v8 V//容器vector中元素的去重
( h' n" j# A% ?' I% G) |vector<int> unique_element_in_vector(vector<int> v){. o7 e: y5 W% f# F7 x8 J7 Z0 d# ]
vector<int>::iterator vector_iterator;& R- ] }% Q& R1 ? t0 c* p' u
sort(v.begin(),v.end());! P9 I3 U. E6 q$ L+ H) G
vector_iterator = unique(v.begin(),v.end());3 _( W: R+ v' c2 e, ?5 j& D- L
if(vector_iterator != v.end()){ i" `& [: G. Q6 b7 O1 j
v.erase(vector_iterator,v.end());
! h# y2 R! c9 I+ o }
( |5 T, D: `* E) b! p) Q$ N) s0 ? return v;
) s4 M1 T( C" e* U. d* ?}- I2 U1 u. V7 v# p+ @
" m7 T- u0 F/ K
//两个vector求交集: c$ d8 I% q, f0 ], Z3 A5 S$ E8 C
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){: c0 x& n% ?0 r9 X
vector<int> v;
- P f: t/ [' P$ }' H- Y sort(v1.begin(),v1.end()); " Q. F1 e8 u( p6 Y l
sort(v2.begin(),v2.end()); ' U8 G) i; w2 x# b
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 ?, {$ V) P" ?+ h# c
return v;
7 [$ v& X- e b1 u/ X5 y}8 w/ t# G" _* N
1 a( m) t* C3 m$ w0 ]//两个vector求并集( J( E* A2 `, J6 i! g; _9 L
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){7 r8 b$ `+ C% N+ w4 |
vector<int> v;) w5 S* l2 j# h6 u) u
sort(v1.begin(),v1.end()); ' B, [8 C0 S) R9 }. e+ W
sort(v2.begin(),v2.end()); ! f' d# _6 {% W" h! ?
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 % d- t$ U* Y0 L7 N y* u
return v;" k4 T0 w, R$ h1 p
}
$ d2 {. I' _: ^& I1 b/ o
" p, c' n. J4 Z4 C3 `5 S" h" I//判断vector的某一元素是否存在, k# H: Z. C2 m4 _7 v s: Y. Z
bool is_element_in_vector(vector<int> v,int element){1 n: W6 ~; v3 s X q( T
vector<int>::iterator it;) S* O1 t0 |9 l
it=find(v.begin(),v.end(),element);- d1 u0 o) e3 z$ J8 q
if (it!=v.end()){
. w% q, g% j7 D9 x, n! p return true;
& w: M8 `0 ^ W- s/ m }# r6 _/ n7 \$ L3 K
else{
; J; f/ ?9 k: P/ e return false;$ g+ v4 Q1 j U0 p& } L
}+ S s* W! o# Q8 ~- r6 d
}1 u( y- ]( w, A/ S; N. A
1 V1 a* r2 j. x0 O# {
int main(){
. p5 |! ]: b* {' G3 ] vector<int> v1,v2,v;! h8 `- g! X ?
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
+ k9 z* m3 P5 e' W: n cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;5 f1 L3 I5 S+ p: w
cout<<"对v1去重:";
, e# }% d' H8 J3 x v1=unique_element_in_vector(v1);
/ `# m3 L( j4 u; B print_vector(v1);; d n, ^5 b" M8 I1 T
cout<<endl;
2 ~# i/ c+ R+ e$ R cout<<"求v1与v2的交集:";
5 A" }$ x1 r4 C8 [& p0 ? v=vectors_intersection(v1,v2);
( v# w. i! z, V& } T print_vector(v);
+ r# ]3 N" c* a) c/ d' u. X) t cout<<endl;: ~& t/ f/ T3 s+ U: R! m
cout<<"求v1与v2的并集:";
8 d% }# u8 s, S' z+ V' ^ v=vectors_set_union(v1,v2);
1 e2 X, C$ C( n% e& D print_vector(v);0 [' o1 N3 x4 L" l
return 0;0 D- z, `4 y: k$ U( J8 a4 W
}[/mw_shl_code]
5 J2 K# v% `! A; d% f |
|