|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
! W# _+ C/ f, c2 t* P7 L
; B( H" H# y* r! F4 d
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
) g: {& `& g! s q1 U" ][mw_shl_code=cpp,true]#include "iostream"
& w1 H* }+ i; f, ^2 p9 D#include "vector" 0 v; Z* K2 y1 r3 `! L$ d4 q- B$ U
#include "algorithm" //sort函数、交并补函数
5 }6 ]5 `" H8 L8 p0 o$ X#include "iterator" //求交并补使用到的迭代器# i0 ^, k7 K( ~& A6 g1 P, \
using namespace std;+ W1 T( J6 {. u$ e( ~8 v
+ g% ^2 _6 O3 H1 x8 }//打印容器vector
0 y' u( @2 V" ?9 T; D, lvoid print_vector(vector<int> v){
8 o0 `# Y0 A% O8 r% @# j! s if(v.size()>0){
2 Y/ c6 \9 [; y G2 K% E cout<<"{"; & o0 b C/ r. c% ^* m
for(int i=0;i<int(v.size());i++){
0 f9 R* ?8 C+ B* m/ K/ w cout<<v<<","; & A9 X- l; P( }6 O
} , S# G' ]$ v- `# C5 y
cout<<"\b}"; h7 v: o4 K Y- K* h
}5 R8 i3 q# y( M0 ~, y9 @, y4 U3 Y
else{/ i) M4 Y E6 ]
cout<<"{}";- }! m5 W; f8 X# `3 }
}0 Z4 {, v2 K3 H; @
} L9 t/ d9 D# l2 T1 }4 g1 n" u
7 R- c& I1 Q5 U6 W0 K5 V0 k
//容器vector中元素的去重
! g. ?5 G4 i E% g& kvector<int> unique_element_in_vector(vector<int> v){5 V, u, V/ B( E" m& O% J% j# [; K
vector<int>::iterator vector_iterator;
- }+ I# }( v8 G# @, r, B- [ sort(v.begin(),v.end());
* ?" e$ p7 r1 o: i/ ? vector_iterator = unique(v.begin(),v.end());
4 @& N0 Y! R3 \$ c) L& d if(vector_iterator != v.end()){. i; M) M+ L) |
v.erase(vector_iterator,v.end());; B! d5 V+ S0 @. ]% `
}8 R) K9 s/ @. X: f" V
return v;
, p. m. T2 a7 u) c# Y. M$ C}
& u! @" m+ @2 G [
! J @' F- M! F1 K; @//两个vector求交集: C0 H9 g- p, b
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
6 p( p) m' M9 ^9 z& V/ L5 L vector<int> v;
8 a3 ?2 h7 Y& r s' A8 D sort(v1.begin(),v1.end());
v, ~7 A" V5 N2 [( H- S sort(v2.begin(),v2.end());
3 H: w9 k1 a3 G0 U+ ^ set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 9 f; C5 a! d8 a# c( _. J
return v;3 v S4 h* t; Q5 e! m* _0 w, d
}
6 M; Y# o3 n- A* `* ~* ?, L& C
4 V" K+ Q6 J3 c* a. i//两个vector求并集
* T1 E8 m" h/ ~# c1 m* Pvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
* n6 {. f, h4 e* ? vector<int> v;4 U" v6 ?: ~ I
sort(v1.begin(),v1.end()); 9 ]8 w* [+ Y5 K$ _3 M
sort(v2.begin(),v2.end()); 0 w0 v+ P# B! A1 m
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
: p( x9 Y1 j7 Y& C; ?% E return v;
/ ^+ l) R( Q# O6 b( C}* O9 Z, m: J9 C, f+ }! S( ]! a Y
0 }! I/ S% y) F//判断vector的某一元素是否存在1 a' t7 X. S( f7 |
bool is_element_in_vector(vector<int> v,int element){5 ]( e, v3 @* @3 N) S
vector<int>::iterator it;, T, A9 k7 \9 r1 P3 @, L9 w3 O
it=find(v.begin(),v.end(),element);
; I$ j+ W) B) Y( T if (it!=v.end()){
7 V0 n' e" Q) Q; J return true;8 B* r: z! q9 g1 ~
}+ H a" ]+ O3 `! j. m5 M$ s ^
else{* X0 a/ R1 a ~' K- X
return false;
( k7 R: I& P9 I+ O }. L$ K# ]2 k0 \0 {
}
% L! e) z' Y7 P( l% p' a% X+ q ) G$ P3 u$ E- y. d' H$ U% s( J Q
int main(){
" {, d5 o5 D/ H0 t2 o! L vector<int> v1,v2,v;. p0 X) S$ W9 o0 T( |
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
) C7 w9 B# W# w1 D+ S& w cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;( l! [- Z! d M8 D d) C, J
cout<<"对v1去重:";
6 T: @" U: |8 ?( s9 G v1=unique_element_in_vector(v1);+ A0 D; ]: a, M+ y7 r
print_vector(v1);' m0 G" x2 L. c' v% c0 y" }# M0 T
cout<<endl;
- |& t3 S- S5 ^) B/ |+ N cout<<"求v1与v2的交集:";4 ?# Q0 K. r+ I y/ }* r: c) D# g
v=vectors_intersection(v1,v2);
1 I1 Q. f/ B7 |" X print_vector(v);% T1 g0 Q. k' }( { s
cout<<endl;8 k3 {) E |( o; U" o# M2 X9 O
cout<<"求v1与v2的并集:";
) \" f+ @# k2 p% v. g" l v=vectors_set_union(v1,v2);! c1 N. d' o0 _( G3 ]
print_vector(v);+ l' i s' b" n# u. b
return 0;
) i6 J3 C' U( B. [& w. P}[/mw_shl_code]
- ~; g3 t; H2 A& o2 I% d, e |
|