|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: Q& f9 a' _2 {2 S% l. o
& u+ f5 y/ T/ A8 q# l
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
; g+ z- O7 j* y, i# r7 O. Q* P[mw_shl_code=cpp,true]#include "iostream"
3 Y# q8 L- G/ ]5 O#include "vector"
1 T0 F2 P& T: t' Z+ p3 B. P! D#include "algorithm" //sort函数、交并补函数7 s* ~6 e) T+ {
#include "iterator" //求交并补使用到的迭代器& X& Z) }) T7 s ^, }0 Q
using namespace std;
) z$ l5 Z! {5 U% b 7 P1 ~% k, d% m, z* s
//打印容器vector% U- l' \% k. P/ |# A$ D
void print_vector(vector<int> v){) F/ | i3 ^& J9 t; ?& t4 H
if(v.size()>0){
7 W; D" j- y* B- [4 q cout<<"{";
' v& v9 O* {7 f! K+ O for(int i=0;i<int(v.size());i++){
% q: {- F5 i4 L1 O& m+ j cout<<v<<","; / n/ F; D/ ]& n' j( C7 @# L
}
7 m0 ]6 ]/ F( s c( e" d: s cout<<"\b}"; ) [* X/ o/ N! a: K. A Q9 T2 e
}
9 B4 Z$ Y. j% D2 K5 y else{. J& e, g$ E4 P8 i3 X4 V) w" ]
cout<<"{}";8 G( j( \9 g I" p) y
}
5 B* O5 s3 G% X( m}
# Q- A0 |9 U- |8 a
7 ^: `: M7 @& O6 x$ G' z; T//容器vector中元素的去重( R; I3 o) i- \2 x
vector<int> unique_element_in_vector(vector<int> v){9 P5 Z/ k3 B2 q; P( E/ c7 S$ N. F$ f
vector<int>::iterator vector_iterator;
' R4 Y- G9 y( n9 [5 W& k9 W2 s0 i sort(v.begin(),v.end());/ x( N5 f# J! t
vector_iterator = unique(v.begin(),v.end());9 p# l; C& M1 x6 N
if(vector_iterator != v.end()){& _; {) y4 |! ]4 I* P
v.erase(vector_iterator,v.end());
/ Y* o$ l+ f, J8 [. N( m }8 _/ T& |; u) e1 y$ e2 u9 B
return v;
" Z% @9 f; d' P. x1 l- q7 T}
: W& B! l( i/ t# S3 ]% J6 \ 8 D& S* ]6 g z0 A
//两个vector求交集
5 n- o& y1 G `, X- gvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
. B: g; e, S) m7 j- `& Y vector<int> v;
Z/ W+ F6 f; { sort(v1.begin(),v1.end());
q( t' M$ j. p0 w" T' F/ e sort(v2.begin(),v2.end());
9 X1 |9 {' I2 ^: t$ @* n set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
, v4 T9 |/ |2 x; |/ z return v;
. B: n7 ?. |; v}8 v# g: d& d. O0 }- H1 s$ @ j
' Z9 p2 V# ?" _9 q# D! z* a+ e: `//两个vector求并集/ M1 X. U, W% K6 |# B0 H
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){3 ?6 i8 U) A% N: V) o& S
vector<int> v;
0 Q$ u6 v( n A& ^ sort(v1.begin(),v1.end());
( e1 u$ J' u. }" L# s4 z0 ]* S sort(v2.begin(),v2.end()); ( L5 ~- k' a, T6 X( y
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) |3 F1 |8 V% V9 R9 `* w, Q return v;. Q9 G5 c4 S% i9 C+ a
}
' S: |" u/ Z' I4 ~! f- X7 [ ) W6 V/ B2 i2 }# x' W8 @) P
//判断vector的某一元素是否存在
" B: q% G1 `0 ?! R! n2 R4 Wbool is_element_in_vector(vector<int> v,int element){+ }0 @% ?% Z' u4 y$ F, _
vector<int>::iterator it;3 i8 F7 E$ J' b9 e. p0 p5 A1 k3 H; ^
it=find(v.begin(),v.end(),element);/ Q7 r! n/ f6 s7 H! Y6 {# {& D
if (it!=v.end()){8 X5 b0 R$ {0 r9 B$ F- X6 \
return true;+ ^: i( W1 q4 `) @/ Y& Y
}. O. j0 M, z% f. ? M
else{2 n( z0 L$ l B; e4 S$ m3 T. g4 I3 I
return false;. Z6 X ~9 _8 d. n/ l" ~
}! V7 m ~' C! p
}
' D4 p3 u) O3 J" ]6 P' m/ W9 U" a) I7 ] j
& f/ f1 Q$ z6 j0 Wint main(){
8 {" a& q2 m6 F# G* h; ]" v vector<int> v1,v2,v;. q# W# z$ z6 N: J d- w3 I
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
# B4 ?* U0 @, R9 Q* Q cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;. d! Q- b( F" }" R4 W
cout<<"对v1去重:";3 g9 W+ b- K0 t* Z
v1=unique_element_in_vector(v1);* u4 d* Z+ [0 F- N7 o
print_vector(v1);) L; P0 R7 \( r8 S4 W
cout<<endl;# `8 V4 u, X4 m
cout<<"求v1与v2的交集:";$ I9 _; o: g9 K. O {8 Z- p: J
v=vectors_intersection(v1,v2);) V [& A# V1 `( F7 v0 s
print_vector(v);
8 P. T9 E* J" z/ A( ]/ a; \ cout<<endl;
+ S( i8 Q. x0 Y7 t# c cout<<"求v1与v2的并集:";
, m. q) {6 @1 _) t v=vectors_set_union(v1,v2);& b% b1 D# o1 N4 g/ V: t
print_vector(v);+ p+ \" t" Y- \0 t! N
return 0;
. O/ r0 D2 J$ K: \ w* F; ]}[/mw_shl_code]
' S. p7 C. L5 y1 F x( y0 U' ~0 W |
|