|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% r4 `$ y7 L+ s) I0 o3 H1 L, _) |/ A
7 b! w& ]1 v: t1 uC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:6 G7 g i' [3 P# X# |
[mw_shl_code=cpp,true]#include "iostream"! V0 w# z8 e& l0 L( }
#include "vector" $ _4 B2 N( `8 p7 \& E3 E" s
#include "algorithm" //sort函数、交并补函数4 E* |8 d% P5 H$ ?; w7 n
#include "iterator" //求交并补使用到的迭代器( X" {% F/ U E/ d+ i. n& M% k6 h
using namespace std;
2 }* r' _- i& k) H2 l5 w; y& c 1 y) v" Q: p6 M1 J% ?) b& K% i
//打印容器vector
9 z7 |# W- h' ^8 A$ O. s* Ovoid print_vector(vector<int> v){
9 A( e7 R; f6 h if(v.size()>0){6 _# B* u; g. W9 m& Z; Y7 t8 ]1 f
cout<<"{"; 9 C. S( I) |0 q
for(int i=0;i<int(v.size());i++){
1 j6 e, |1 T7 M# g; d' u cout<<v<<","; . R. C- u+ R7 {" D
}
- F/ n1 Q! {" }( @% K cout<<"\b}"; 2 `% [9 b/ ]& B; f3 z
}
/ U: D: B7 Z. B$ f6 J: X# G else{9 C- M- g/ r6 j& x* l5 W( E
cout<<"{}";& V$ u' Z% f% h D1 o# k% w
}
2 @, Y6 Y% M2 q0 i9 S& a}
' l: I* E R E8 y0 S* d
% v, R7 R1 x& Z, b8 t* i//容器vector中元素的去重" Q% a+ R' H- S7 ]& h
vector<int> unique_element_in_vector(vector<int> v){
: A8 n2 A$ n8 o l" l: j0 u" ?. c vector<int>::iterator vector_iterator;2 j/ F4 S" R3 h7 m
sort(v.begin(),v.end());
( ^$ g/ m' n- k2 P* X0 E3 e vector_iterator = unique(v.begin(),v.end());6 `3 G) ^' d1 ?/ i) y+ H2 w
if(vector_iterator != v.end()){
! C8 G: }0 {3 k2 x4 `: m) D# _# G v.erase(vector_iterator,v.end());
$ j7 W, j) y# e" Y }
4 _( q6 I' j) R1 L; a. R5 s [ return v;. O/ e' b9 b o. D% d/ l: }% q/ X
}! Z" N2 A2 P! |% T! h
- k) a* `/ A% J( p) Q1 H# T" D4 r9 z( z7 U
//两个vector求交集% K4 q! D7 A& u8 P
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){/ M7 y: b$ s3 A# I) l, z, z9 H* Z
vector<int> v;
) u) f- f. q1 A4 |5 t7 G sort(v1.begin(),v1.end()); - a0 q! T) l+ m$ g6 N& W
sort(v2.begin(),v2.end()); 1 N. ^4 S' U% T0 \ [/ U
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ! D* e2 A y( E" |# A7 K
return v; X& ?/ Q# ^- B5 ?- |4 h
}
, V! j& l" ?" W ( J! a. l+ ^- V, e( W9 E9 D* t8 U
//两个vector求并集# W' c# P! W' l% R' \
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( A. f; {; u" L8 H5 Y vector<int> v;
" a; H D6 |0 Z5 d sort(v1.begin(),v1.end()); 7 ?' T. [( V" |1 @7 ~- z0 a
sort(v2.begin(),v2.end());
5 c* X) {$ U1 @; Y set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 - v) @9 K& V9 x( v. K; G p' L$ M5 @
return v;
) C m; `4 S) k}; s% | Q4 P) D4 ^
+ }' c/ a' u0 t2 c5 Y! K9 e//判断vector的某一元素是否存在
) r8 \0 Y# A2 C" `+ @6 ^ `! lbool is_element_in_vector(vector<int> v,int element){
& x/ {8 a) s: F& C2 i. A vector<int>::iterator it;
; @% T6 P x( J it=find(v.begin(),v.end(),element);
: ^. M, Z4 K; l" n6 \, t if (it!=v.end()){
1 y( c' W& {/ N return true;
$ }9 T, n: ^# ~ }1 ]0 u. g) [& a+ F% G0 S( R; m1 B) _
else{4 a9 h; g$ s: c: [: T4 _1 a# j7 |* @" l
return false;* k" d0 ^6 M0 Q) t% N" W% S
}& W- u) \' F2 W9 }; Z
}
6 u1 q8 Z# Q+ L0 S- J " \7 j3 P: I3 j
int main(){5 a% v7 y, G+ N' t
vector<int> v1,v2,v;
$ A0 L% W j8 r v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
8 |" J o# k, U. b1 r cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;' X0 J+ Y! X9 M( R( a1 c# Z* K
cout<<"对v1去重:";
1 B; T# U; p& C8 n X" k5 n% F v1=unique_element_in_vector(v1);
$ \0 ^5 w% e0 I) G. _ print_vector(v1);
* f8 K4 W# }0 W7 q$ I6 N4 v cout<<endl;: }0 D- `* F& a2 N0 v4 J* z, I
cout<<"求v1与v2的交集:";$ Z( V5 g+ H; K6 x9 ^" [
v=vectors_intersection(v1,v2);( b3 w2 h/ U1 h9 p
print_vector(v);; ^7 ]: _. W- I+ l2 `
cout<<endl;
* W, }! U+ M8 V8 y4 z0 s cout<<"求v1与v2的并集:";; N. S8 e) d7 ?+ i
v=vectors_set_union(v1,v2);- h# I; a; b( U6 R
print_vector(v);3 f: e0 P/ ?3 K
return 0;
* C9 x8 e$ L% ^/ x& m1 ?1 A9 o}[/mw_shl_code]% V( V: { m2 ]0 i" `; |9 c0 f, |9 K
|
|