|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
* j: K; A1 |; n& D
6 M; C1 c# H. e. u' V0 NC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
: e. n5 u; i1 q Z6 B5 Z# p% [ C[mw_shl_code=cpp,true]#include "iostream"
Y2 q! W% @1 W. @ _5 `- I#include "vector" " V2 Q+ W; M0 [% M# r* e
#include "algorithm" //sort函数、交并补函数7 p8 v! R! X8 i. g+ O2 m2 o3 g
#include "iterator" //求交并补使用到的迭代器
% ]" m/ F$ O0 n( v' Q" C: husing namespace std;0 k, e$ D$ @ i( E0 A' I
; |# d% b! L7 e5 T. \2 u
//打印容器vector
; ?$ j: C* Z0 r2 B8 Ovoid print_vector(vector<int> v){
. U7 M) j" o `# c7 j if(v.size()>0){+ x! ~4 o9 Q7 r+ x0 b
cout<<"{"; ! N; W0 u+ s" V7 D+ h9 P [
for(int i=0;i<int(v.size());i++){
2 }9 a" W+ r# p# [1 X4 R cout<<v<<","; 7 C; `# |) J7 u# Y/ p
}
2 l4 q$ _( d0 z- o' N cout<<"\b}";
$ M2 T% w J: g8 o }
$ K9 X j' E3 _& h; l4 o else{
* W8 }! j. O9 j2 o cout<<"{}";
: p p6 A$ {" l: _; ]' G2 v6 B0 H }
% f3 I# F1 K, W9 |}
x9 W1 q1 w" y$ k
% l. B) i: U4 s% N* D//容器vector中元素的去重2 | c$ u, Y+ U) [6 H: w
vector<int> unique_element_in_vector(vector<int> v){7 Y P- g' k5 x* H, l
vector<int>::iterator vector_iterator;
0 i9 G7 m: @/ Y2 T& @4 M sort(v.begin(),v.end());. t( ~, C& }2 \8 C
vector_iterator = unique(v.begin(),v.end());: X( g4 X- t& O( U, @. _
if(vector_iterator != v.end()){
& U# b x' `4 \# Y. ? v.erase(vector_iterator,v.end());
0 `% R2 H6 D" l2 M0 ^ }
: F! w5 p- O6 i" D0 E' ?- U' j- m& A return v;) q. j# U3 \. f8 l; ^* f. V" h
}9 N) \$ G1 E/ i$ g1 X% A( U4 b
1 B: L2 i3 I- p9 s$ c//两个vector求交集5 g$ Q6 R. i# _
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
2 q+ f( J) f- E vector<int> v;* D4 h4 A* E/ ]) O
sort(v1.begin(),v1.end());
4 \& I' P, p* ~ sort(v2.begin(),v2.end());
3 u& y( o9 h$ @+ f g set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ V" t% z" b# ~/ K8 ^+ e
return v;
- K7 \; I { ^9 y& @" z} d* a2 L+ l$ v/ V2 t* I) T! z
$ @) J$ E" ^; k- R( S
//两个vector求并集. B7 W5 K7 p+ \7 k0 z8 l
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
3 C& v8 `' J7 u R/ u9 y J# M vector<int> v;$ y5 D' \ Z, w3 G- q+ b$ k
sort(v1.begin(),v1.end()); + R. R7 H6 U6 x. N# V
sort(v2.begin(),v2.end());
+ m+ C: d2 a: ^. z set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
7 B C# o% _; W8 D0 O1 O return v;8 i, o- M7 s" \% Y% j/ W" S
}5 g* H/ e$ c, O# P
' S1 q x8 `% M6 Z# p
//判断vector的某一元素是否存在$ _# k$ m9 d, K) b9 O
bool is_element_in_vector(vector<int> v,int element){7 `9 a% j3 p& t8 d7 d; W
vector<int>::iterator it;* w7 Y' M" ~9 x/ _
it=find(v.begin(),v.end(),element);
- G% A8 Q; e/ o$ ?, r% [0 A6 n if (it!=v.end()){
4 a* o: }) b. p1 z; f return true;8 d; r" {1 g( c
}$ q- P0 c, O! L
else{
0 m; N. Z( f1 d/ P, h( ~ return false;+ B0 E4 e7 l0 z+ P' T
}+ a* t6 W$ x7 j; g6 `4 e7 T4 v
}
0 @, ]) G. S4 L& m 7 ?7 G/ f5 |$ y5 R. \
int main(){
6 B9 D+ \* k- C: g" d" S vector<int> v1,v2,v;+ R) R) J9 I% r5 R" r/ B" s
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
! {; B* |- b1 D5 z7 i: k' F cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;7 _6 t" U* [9 { q; W) J
cout<<"对v1去重:";6 ]" d' {/ P; {" s9 w# [+ U9 y$ W
v1=unique_element_in_vector(v1);6 M' G; f: e5 q% J7 ^* g
print_vector(v1);; t: g8 g/ s5 ~% O
cout<<endl;" v; z7 w. `4 o; |, v9 c
cout<<"求v1与v2的交集:";5 m2 ]4 \2 v7 C
v=vectors_intersection(v1,v2);$ e& D" n6 n6 h
print_vector(v);' w- z& e$ Z# |/ N$ e- D& l7 k
cout<<endl;* G8 u& E( `! B) K& f9 s5 o" }
cout<<"求v1与v2的并集:";
0 b4 B0 v* E2 `. K9 S8 b! n5 c v=vectors_set_union(v1,v2);; e$ n: M: e2 p1 R% u5 |$ u# d
print_vector(v);8 V' Z# Q, C4 Z* S. i+ j
return 0;9 q8 D6 Q$ J/ k+ q2 P( a/ {3 y( v
}[/mw_shl_code]# _2 l+ Q0 S6 Y! G6 t8 y3 D
|
|