|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
/ @# H$ ^# `; d) @+ _
/ O- n: x) ?2 J# Y% g# \# k1 |C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:2 r" R# ]' v" U
[mw_shl_code=cpp,true]#include "iostream"
: ~2 C& q$ |9 A; e#include "vector" ) Y% N. O1 l+ a/ p% P
#include "algorithm" //sort函数、交并补函数
. x8 z/ g* a" b: Y ]#include "iterator" //求交并补使用到的迭代器
9 r k( w! E) eusing namespace std;
9 H1 J# P5 a% j/ U. T& o . W) h2 A& I. U0 x
//打印容器vector/ b: K) v8 N7 M5 C6 v
void print_vector(vector<int> v){! N6 q* f7 ?. z) X
if(v.size()>0){, S# Z4 l; p* q; _9 _
cout<<"{";
/ M1 X2 m) a! C/ p* w for(int i=0;i<int(v.size());i++){
, o$ k! g- ~+ r3 K cout<<v<<","; 1 Q, m& y Q# K/ B/ K3 O' j
}
* u+ D% r# y8 L! S5 N cout<<"\b}"; - g; E" `' s$ j0 A. B7 {1 B3 i
}0 C9 v" O. q8 q5 C0 J/ w6 p
else{" j$ G1 _4 v3 W/ _% u8 q
cout<<"{}";
7 ^, h* B. L* J" Y; w }
9 c" d2 _9 [: q j. o% d4 k! \}' ]9 H: |4 a3 Q0 e8 L( Q
( l0 A1 g0 q: |6 r2 w
//容器vector中元素的去重/ m) G! w3 E" b% k3 R
vector<int> unique_element_in_vector(vector<int> v){- H- M9 n# u/ ]/ i) u6 Q4 B. r
vector<int>::iterator vector_iterator;
+ V/ T' w S/ I$ L/ n sort(v.begin(),v.end());
; F) q* W; i4 X9 D vector_iterator = unique(v.begin(),v.end());1 y( f; S$ P5 Y! z- u! h
if(vector_iterator != v.end()){$ u N. Q5 V- y
v.erase(vector_iterator,v.end());, h+ P/ N0 H9 U0 E
}" [. ]- {, \* \3 w2 v. f
return v;/ S1 A# j) A2 T( {' }& n
}
+ P9 {/ l% y9 F) @8 c v
/ U5 v* ~4 ^" g& m: p& k//两个vector求交集; j+ T- p! i( w! a: E/ z
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
$ A* f0 _8 L' x3 i. n. p! ^ vector<int> v;2 j+ X8 p4 f+ U1 W' u
sort(v1.begin(),v1.end());
. U" k9 n9 F. G3 H9 k+ H) ?9 F' r0 _ sort(v2.begin(),v2.end());
+ y; F. k) J( B" e7 k; E2 {& [7 ?5 a set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 4 Y. S& F p; d+ r- I L' Z: }
return v;
- l+ A. O5 m! G}8 N) I6 G7 ~% r" I6 p
2 S% _' w3 w" m! {% g6 a8 }3 v
//两个vector求并集
! N9 h4 [- e$ D" y- B1 h: V, uvector<int> vectors_set_union(vector<int> v1,vector<int> v2){9 O: E. L5 a% h1 Z% V p" u9 a8 W
vector<int> v;3 X9 b2 [5 L7 { ?/ Z$ B* O, c/ S0 V
sort(v1.begin(),v1.end());
2 c& c4 N, N0 b" ~ sort(v2.begin(),v2.end()); + e+ m- ?8 w) O, o# X% a$ w) T
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 ^, o# z( Q; j+ Y6 o( W
return v;
( v9 U5 q W+ E+ V}' p- e$ E: v" T; E h7 G
`7 V* Q1 N) C//判断vector的某一元素是否存在
7 X; p }+ b3 |8 l! B" ^ ibool is_element_in_vector(vector<int> v,int element){- k+ z( j p# n7 ~
vector<int>::iterator it;
* ?2 E( |. R- }: e8 c4 | it=find(v.begin(),v.end(),element);
% @$ ^3 x/ x6 S" U if (it!=v.end()){* g0 U( X8 B2 l' \1 D& `
return true;
S& d9 A- V( E% _9 K5 w/ z }) K3 }3 l0 C6 k0 l" U7 k, k
else{, ~% e5 c' m0 k9 n) }+ U
return false;
' {. d9 V% O6 n }
& h4 T. ?3 \7 j+ Z6 Y}$ l+ G' l; w- k' V/ {3 \ g) W3 m! J, j
" S! |( P" {3 ~int main(){
' t: X4 p& t9 N% e vector<int> v1,v2,v;
) d( R( a% j) W, N- u f' V& h$ s v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);6 _$ J9 W* v3 v; s# |
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;9 b$ w& L% ?, o# W v% U
cout<<"对v1去重:";
! l! E7 m* C+ r7 G- @ v1=unique_element_in_vector(v1);
+ c' d* ^0 [9 n x print_vector(v1);( K; O$ G% N0 p6 X6 N3 r' r
cout<<endl;
4 u8 f0 U" x% Q4 ]; [1 k* M cout<<"求v1与v2的交集:";1 _8 }: J0 }+ `0 x
v=vectors_intersection(v1,v2);. D; F5 [) }9 l4 w
print_vector(v);& F+ r& [3 e; X0 v! i- c
cout<<endl;
. E6 I' C1 D. G( I, ?) G3 F cout<<"求v1与v2的并集:";2 `3 a( E) M% j5 {$ V* x
v=vectors_set_union(v1,v2);
( O( s1 O- a1 h, b% s1 `, X: { print_vector(v);* r b' V, a' d
return 0;
4 z7 l5 k4 X) Z2 k}[/mw_shl_code]
* c; `' m7 R$ j7 L- ^. C |
|