|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
' ?' q) Z0 a- K( ~5 M
I% b+ p& \5 @" S1 m- H" ]
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
; I7 [7 Y" R1 y4 C0 k" x+ B- o[mw_shl_code=cpp,true]#include "iostream"0 R: i- C7 p! G2 {3 m
#include "vector" % e9 S* i& f) w! P& `( T
#include "algorithm" //sort函数、交并补函数# p, O* Q- g# O7 k# t. I
#include "iterator" //求交并补使用到的迭代器
* @( H( c8 J Dusing namespace std;- w/ s- U$ }# m" U: }
1 z. Z+ B) t: r5 Z( p& ~8 U3 B, V//打印容器vector% }9 P* r; I+ R2 y
void print_vector(vector<int> v){
s* V4 o7 n. z) k ? q if(v.size()>0){
( `) Q' {) l2 s cout<<"{"; 8 Z* }+ a2 a. n- E
for(int i=0;i<int(v.size());i++){
% n I1 e9 M5 c' f& I7 | cout<<v<<",";
8 N7 x3 H/ n# n$ m0 E% Z2 C: I C }
* m7 L( s5 w% F% c$ q0 z$ y cout<<"\b}";
g! ^# I8 K5 h* F/ J8 v }
" Y8 m; M: R; S/ F else{4 P( M/ m0 }, W1 y
cout<<"{}";
$ t i+ E _8 u3 p+ d8 N* Z }4 u6 z* A) m1 |' t! T/ w/ l5 g, Y
}, R8 s5 t4 \( a. h( e6 v
' h3 b- `2 ~7 J//容器vector中元素的去重
/ d( s) B$ c- y' c/ Zvector<int> unique_element_in_vector(vector<int> v){+ z) E3 V3 f$ y2 ~( |& n
vector<int>::iterator vector_iterator;
) v" b6 Q" y P) _+ H7 b8 I sort(v.begin(),v.end());% o& h" K; j* o- C( z& H- Z9 k
vector_iterator = unique(v.begin(),v.end());
8 p0 {, l$ j) }( s if(vector_iterator != v.end()){+ @, x' V8 [: u2 |2 G$ u' ]
v.erase(vector_iterator,v.end());
4 R$ v- {, E. K9 i& l5 _ }
7 U0 G* \' r# Y6 x d/ T/ {& J return v; j' m+ R" c$ m. }& ?0 n
}
) }3 o8 k m+ G( [7 g/ W # p5 u. h U# r: {! a2 p; S
//两个vector求交集' F: n( W( i% ?2 j
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){+ E1 D& V) }8 z: K* B9 K$ Q( V a
vector<int> v;% l1 S2 P* q7 Q* a' y: \/ F+ D+ m
sort(v1.begin(),v1.end()); & r. o$ N d2 T& L; y7 o
sort(v2.begin(),v2.end()); , h8 m8 b1 h9 v/ k# J
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
* J" u$ H2 o3 g return v;
9 ]/ ]3 `: N6 t* F}
9 x" F7 l( v, w: O
/ l5 m1 m) [" v) C2 P' V7 e% U- W//两个vector求并集
& C) r, Z$ f! W7 v9 Wvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
1 ~+ f: m$ y ?$ Y j# I: f vector<int> v;
* n1 {' o; F' ?5 l4 u2 Q sort(v1.begin(),v1.end());
/ R; S ?6 p& R' r sort(v2.begin(),v2.end());
- V1 @8 M: c4 ]# t: `* m set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 - \* Y" X0 W1 n% I
return v;- E) o' c% q. Z0 `7 p ~( T, ~
}
. A! c/ R w( C0 r4 M J4 H' x5 D
" d/ b1 x0 h; K, ~//判断vector的某一元素是否存在& j" q& g. b" g
bool is_element_in_vector(vector<int> v,int element){
& o- B4 @4 |6 {8 N, P vector<int>::iterator it;5 x( H$ h5 Y* z
it=find(v.begin(),v.end(),element); w2 {5 e' ]: e, ^, q
if (it!=v.end()){ R3 r! G7 Q; C! x
return true;
A9 G( {# d& e6 v% F% c }
. {8 U- C: b# r8 I7 p' V! X: p else{
2 |8 H d& i O% ~5 a& W return false;% r. T9 f9 g% ^# v6 Q
}
* h' b8 R( u* u/ a* ?}
, e4 z! u' C; i6 E+ b& P: ?% ?
% P6 U5 v- E! N! h5 b& iint main(){! R( Y. J3 @; ?5 d$ j7 v
vector<int> v1,v2,v;
3 @1 ]; A+ Q6 s; Q v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);$ C% W( z8 M! R0 ~. ]
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;1 t: b, R$ t, X- v( M% P9 l
cout<<"对v1去重:";2 `5 P; e* k: P. Z
v1=unique_element_in_vector(v1);2 d- [8 o$ N! d
print_vector(v1);
$ h6 R; u$ x; x3 A- a8 x cout<<endl;' V4 x: l# a* e
cout<<"求v1与v2的交集:";
- p( U3 L/ z: w! ], s" A v=vectors_intersection(v1,v2);& {$ ]2 c" u2 K! r& g3 w
print_vector(v);4 q9 v/ u i2 \( i/ e0 E+ H( I
cout<<endl;; \) ~9 n+ X6 r
cout<<"求v1与v2的并集:";
- E2 \) w7 ^+ j8 v5 z! P/ B9 X v=vectors_set_union(v1,v2);$ }% o1 s& N" d
print_vector(v);! K, h9 N# T: D, }% G
return 0;
' y3 o9 E& o- ^2 H" I/ l; s& _}[/mw_shl_code]$ p9 S8 e: O" s! B; V# R
|
|