|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
- \; D/ _! G) T6 s9 t
6 H2 V6 f- |0 J% n& o5 dC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:& T# @$ u. ^1 z L( h4 N: U' T
[mw_shl_code=cpp,true]#include "iostream" O& e/ O& Y- Y0 ?# S* v
#include "vector" " w/ Q. C+ _1 e& l$ ^. d9 R- V
#include "algorithm" //sort函数、交并补函数% ]$ i6 X, p& }; e- u) p/ p
#include "iterator" //求交并补使用到的迭代器, K4 h5 l3 g$ O; I1 }$ `! j2 U
using namespace std;, R+ F0 _, A4 ~6 `& l7 J
1 }+ n6 ~" d! |* ]; C//打印容器vector- i6 t/ y* i- G) o4 z' M/ ^
void print_vector(vector<int> v){
$ g: C2 [' e' P' A) w if(v.size()>0){
- B3 Q" f* t" O/ S) N' I cout<<"{";
, O4 F6 j, Z: Y. B2 s1 e6 C& ^ for(int i=0;i<int(v.size());i++){
" j; m4 I! V( i cout<<v<<",";
& p7 `/ I1 O2 i& {0 l& i }
, u& F j2 i2 c cout<<"\b}"; ( t9 a$ C0 t) P& q5 r3 [/ \
}
: t8 R* Y7 E% n& U else{' m5 g# ~( R1 ]+ h" \# X
cout<<"{}";
/ v2 A2 y) s3 W- H) a! c# Z) P8 g }
$ m' ^3 ], k8 ^+ L; i}5 U2 c# k, p( g# x
# B5 l; M2 ?' J//容器vector中元素的去重* w+ [% a( h& p1 \" \
vector<int> unique_element_in_vector(vector<int> v){5 X! t A) `: f: S6 T
vector<int>::iterator vector_iterator;9 [- @2 w( j; N P, l U) ]
sort(v.begin(),v.end());$ I% z* g1 b' a
vector_iterator = unique(v.begin(),v.end());+ H6 b# d. K7 S; o4 G! }' p6 Q! n
if(vector_iterator != v.end()){8 x' ~; [0 C* J7 n& I, [
v.erase(vector_iterator,v.end());
) E9 y: O$ c3 c$ G( ? }
( p; o" e% m% K& q% |$ P0 }9 k3 ? return v;5 G. `* ?2 U7 F T1 U7 m
}
4 T5 s2 _2 d# W. a) ?& e5 U + z8 h4 C0 L! |9 t0 d. i
//两个vector求交集/ Y; r b$ E& u. H' q
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){& S/ X3 i! p" U
vector<int> v;
7 H6 `) y3 k6 O4 x. ? X sort(v1.begin(),v1.end()); : I5 p9 F' r. L4 J6 \8 z; v
sort(v2.begin(),v2.end());
' F5 s5 d0 U$ T% \; _( T7 `1 ? set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
0 F) M( b* _# { return v;
1 x$ |& q. C1 A/ i( I$ u}/ g0 M7 E& W+ V; f
* \+ W: i: T* I
//两个vector求并集7 q( t* a" @# ~1 _6 c
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){: j( P" m& W0 q+ H9 G. }
vector<int> v;" L# ?( v( G- T |- k
sort(v1.begin(),v1.end()); 4 M' y. y1 h6 p
sort(v2.begin(),v2.end());
! u& c, G* R6 t+ g, P+ k0 L8 B6 t set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 {3 Y( F) J" i! V ^: X: J# L return v;$ y" @9 g, g) a4 M$ m5 B" I
}- f) S1 b" j! R6 A, u* K$ K4 b9 Y
0 I! B+ i- t0 g2 } M
//判断vector的某一元素是否存在
4 y4 m. r o8 }3 a$ v5 `bool is_element_in_vector(vector<int> v,int element){
- e" P/ C. q* t+ F( `; q" b8 O vector<int>::iterator it;/ O# d! _, P `( T6 m9 T4 S/ ]
it=find(v.begin(),v.end(),element);
4 w s6 n' C; x if (it!=v.end()){6 t) s) I+ R! x: _$ f
return true;
+ V4 o, @! W. v5 p }
! r/ Z4 I$ q$ N7 |, w else{+ c0 _5 X# ~0 B8 l$ n0 Q/ g; R
return false;) a' x# n, z6 {! s D
}
* O o9 h) F z' s0 w2 U9 u}
" \+ Q8 _8 R* B! |$ U1 g0 F) E
. w) E' O0 a& S1 H. T) lint main(){
# Q- o( q% }/ g5 S9 \! |: O8 [! h vector<int> v1,v2,v;/ Y* o0 D/ S/ A% W0 O$ S
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
' x e3 N0 S0 n$ R cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
9 @" j8 }- F( m9 x7 M5 a cout<<"对v1去重:";4 z3 }6 ^/ u! U& {9 B
v1=unique_element_in_vector(v1);
2 S% t0 [2 e7 [ print_vector(v1);! l+ b1 m- }$ l! f# i: H9 ]
cout<<endl;
: q% j! X# {/ S% L cout<<"求v1与v2的交集:";
. N3 A" ]; |6 r! o \ v=vectors_intersection(v1,v2);1 {7 R: |9 o1 R9 t6 [# ]: C9 O
print_vector(v);! V& f9 }% w2 Q3 G! f; G
cout<<endl;
9 I/ q* i9 G! G$ e3 r cout<<"求v1与v2的并集:";2 M1 J( B# }# @
v=vectors_set_union(v1,v2);$ F, m8 T! R& `( j
print_vector(v);
5 ]4 V, i1 [- l) e& \" T9 o+ g/ x return 0;
& D' O, q9 d+ V1 y% B @7 M6 r}[/mw_shl_code]
! T0 \$ R: ^% A% E) W3 f- r |
|