|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
4 a5 |: u, {. z9 `% O9 `4 [
1 n ?3 P: U- U+ W- ?C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
0 F8 K& A9 l8 z% T% x[mw_shl_code=cpp,true]#include "iostream"' O0 J9 R/ c7 c9 W* d
#include "vector"
% t8 ~) y8 o: O: p. j#include "algorithm" //sort函数、交并补函数- i0 N. a5 h# l' a
#include "iterator" //求交并补使用到的迭代器
( R/ n G; K$ A- Eusing namespace std;9 i* `8 U8 R) o7 U( a
- Y6 I+ ?* l. i* P) M! [) ?5 c
//打印容器vector
" V3 S7 l# X* Z( rvoid print_vector(vector<int> v){% i8 @' S9 N' v* `& z
if(v.size()>0){, d- l1 g! m0 k2 ]
cout<<"{"; " `1 k! P6 N- l: i( a4 X. j
for(int i=0;i<int(v.size());i++){ 8 o9 d4 j7 n) U2 ?8 [* J* A: a! z% C
cout<<v<<","; " L5 M7 w' z8 ]) |) o% m
}
% D( x% w% h3 L# S4 M P4 V cout<<"\b}"; 0 |! D* E+ b/ s
}: o- E0 \# S- }7 Z3 D
else{4 i9 Z) I6 z2 H t# _" P: u- {8 u
cout<<"{}";
: Q8 `" B" P: C! M' Y }) p7 {. g! M! y- r4 y- \3 r+ ^
}* Z+ f: y5 h* A8 ]2 p& i9 m0 N
, N3 f5 D& l5 R6 U! i7 n//容器vector中元素的去重) {) s- f+ h2 {- g" j
vector<int> unique_element_in_vector(vector<int> v){4 u. y2 Z: q0 z( u# L
vector<int>::iterator vector_iterator;
& H$ J5 y- a* P9 Z sort(v.begin(),v.end());
1 C. H& s- f. J9 E/ f vector_iterator = unique(v.begin(),v.end());
% D ]# W' q) L' X# u1 X if(vector_iterator != v.end()){% ?; X; A+ |% ]+ V5 F
v.erase(vector_iterator,v.end());
. ]0 q7 E& y& o9 G& {% n }$ l: l: w! s5 ^8 S z B
return v;
4 m& h* V2 \' H6 e}& A" _2 O4 ]" I$ E& d* G7 K7 N
. J$ W) @6 g( C& Y. T! n' L//两个vector求交集
2 ~. q: u& R, ]+ Cvector<int> vectors_intersection(vector<int> v1,vector<int> v2){& n1 P4 J. {' {6 o8 \
vector<int> v;! A* u- Y# z1 n1 ^
sort(v1.begin(),v1.end());
+ o' U+ S% x+ y sort(v2.begin(),v2.end()); ) o# ]! S/ S! m
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
$ T. \) u8 C, W" o3 X5 T# g5 b return v;" v; w: p' U1 N3 [1 M# D+ T) O
}. X, u/ v8 u# F( X
2 g: v, \* E" `3 d/ Y
//两个vector求并集9 Q- w3 A( s6 @$ O6 U" [+ m
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){4 T+ f3 i* ^, d, ?( Y3 \
vector<int> v;% w& ?: D( l8 C" X, N! f4 |
sort(v1.begin(),v1.end());
% g- n" _" A' c" O/ w j K sort(v2.begin(),v2.end()); - L2 X* U. K5 B/ u7 @. L% B6 S
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
5 g/ p6 _5 Y( X/ l$ A return v;# x v3 ^( I& h; i# F
}
* |1 v8 r/ i5 U% g2 X# \) x% S4 \
: V7 |( p# H, g3 U/ }//判断vector的某一元素是否存在
/ F# H- ? f- bbool is_element_in_vector(vector<int> v,int element){
' N9 c' I8 e+ j( i6 Q/ b2 b vector<int>::iterator it;% F( I. n6 f% [0 \7 N- Y# E
it=find(v.begin(),v.end(),element); f5 m# Z4 k6 q0 Q
if (it!=v.end()){
8 c+ H3 j. Q5 a1 {& b7 r6 `3 R return true;
5 S$ k! Y8 L* J+ g5 r }
2 C, j* H1 j6 k% P2 I else{
1 F# \0 F& f0 n- K return false;
2 Y" ]2 c% N; P! m) ^ }
" z8 L+ n6 {5 S- B: g. }3 Q}' W1 |2 L1 u$ H% c" t% J
" s1 I( z( x: Z: cint main(){
- g, _( V+ q3 k: X3 ]/ Y6 |" f vector<int> v1,v2,v;: D' b/ h$ {, l; ~5 Y5 E( F$ {4 d
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);# w! \0 w5 J$ t$ ]' t2 a4 J
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
& N* w' C1 `2 \ cout<<"对v1去重:";
8 x8 l4 _% O1 D: w" `! V/ w v1=unique_element_in_vector(v1);
& ]4 C( i4 t' o7 x1 j; j. |' \- M print_vector(v1);3 ~, w2 C2 r/ Z2 N# M! }; d! e+ f9 M$ }
cout<<endl;; ^; J% A' r) K- v& k8 S2 G' y5 H* s
cout<<"求v1与v2的交集:";
5 m8 ^0 e( P7 O/ W v=vectors_intersection(v1,v2);& r6 `0 o8 w9 K6 X2 U$ ]% o: @5 z
print_vector(v);2 R& [$ F8 M, ^- R# F" I
cout<<endl;7 X. l+ E; H0 E1 M! ]
cout<<"求v1与v2的并集:";
5 f" s% T) d8 E: l v=vectors_set_union(v1,v2);% a+ L- S m& O; c( [; V
print_vector(v);
( d& |* L3 p2 ?2 O3 q9 }1 T return 0;
) O2 l% F& M+ G2 U- U ~5 @; p" |}[/mw_shl_code]7 b+ i2 N- E- U: _+ \
|
|