|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) L! o/ G. c$ L
' j% s% A% Y; t- q# V5 O! m7 \) kC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
/ X* d$ |3 F0 h* v) U6 v& t! a[mw_shl_code=cpp,true]#include "iostream"( k) K" z7 m* G/ e# }+ o, m) q
#include "vector"
& n9 Q2 y, { D# Q' e- p#include "algorithm" //sort函数、交并补函数
4 k3 d0 Z! o( N" b8 P0 W#include "iterator" //求交并补使用到的迭代器
8 W- h8 Q {- w0 s Kusing namespace std;2 [+ u9 } x/ j' S; ?
( u0 d7 C8 p+ Y- R3 X
//打印容器vector
: j+ | n+ r! A9 ^+ O l2 t6 ovoid print_vector(vector<int> v){ o' }' R; ^) y9 u8 n; u
if(v.size()>0){
9 w4 f6 f3 d6 L$ H/ `, W3 h9 p2 Q7 T cout<<"{";
3 @- \/ b: H% {& y" T for(int i=0;i<int(v.size());i++){ 6 e$ w `% t( v7 m- c8 v
cout<<v<<",";
6 z0 z1 e8 z' }; O# a9 Y } ( u$ X6 `% O+ f
cout<<"\b}";
* C/ n. P0 m+ R( G }7 U- K' G; `! e, a0 J1 ]
else{3 s: u0 t) w6 f0 K" i5 C
cout<<"{}"; I* g: @. r: C8 F2 J
}9 b0 c# W3 ^0 P' M
}
8 S3 _: }3 ^/ [8 S' j
! ?2 m) H ~ Y9 I2 W//容器vector中元素的去重9 N8 h T, G' @: {2 w0 ?$ V
vector<int> unique_element_in_vector(vector<int> v){
3 @2 m7 S2 Q: P9 p' t vector<int>::iterator vector_iterator;
7 S) |7 A2 F" K& g sort(v.begin(),v.end());3 u1 @7 [2 n! K3 V9 r) e( I; d
vector_iterator = unique(v.begin(),v.end());
3 c5 H" I4 G4 Z8 w9 b( p& i, x if(vector_iterator != v.end()){
$ H) h, \3 O" P v.erase(vector_iterator,v.end());
" ~- ^' U0 n% t+ U }
2 F; _* O6 g% m% n t- m# F return v;, Z8 ]( y4 i0 j
}* m5 n: _7 n( B
/ ^! D: {# _2 [
//两个vector求交集
5 T6 O" @5 M/ L% L( w( o& V0 u9 Xvector<int> vectors_intersection(vector<int> v1,vector<int> v2){8 K; j* O: i4 P+ a) a; A$ P5 i
vector<int> v;
+ i$ [* `9 X G- l! _5 Y, C sort(v1.begin(),v1.end()); . ]* d6 {4 L9 N+ u! x
sort(v2.begin(),v2.end());
# H$ F! Y: u7 X `) [ K set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
$ Y* w" r* e3 X8 Z. Y0 K% S return v;
3 T* f( ^2 p6 s7 F. y8 J4 |}
$ G, u3 ?* Z; d
9 N) B$ m5 g& I- B+ y0 ?//两个vector求并集0 ~1 m( O2 m+ j3 R7 ?( W _
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){# g" v8 g1 S4 ^, s |
vector<int> v;
# w3 [, H, B: j sort(v1.begin(),v1.end());
' \7 @! K% E0 w, U) v- h' c sort(v2.begin(),v2.end()); # l# F( d* @( i
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 0 j$ U; Q+ l& J" X
return v;3 S: _! q+ w8 R; j6 J3 @
}
+ Y- y& R8 U6 P6 i& }, V4 k 6 J9 x, M$ F; N
//判断vector的某一元素是否存在& q, |9 A# w# C" b" ]; ?
bool is_element_in_vector(vector<int> v,int element){
, q, n) l& @+ u: r+ U8 M vector<int>::iterator it;
3 q, ^: i4 ]$ J! z it=find(v.begin(),v.end(),element);
, F; r6 Z$ q# D i: e: b0 u P if (it!=v.end()){0 z! s! e7 F# B+ J) r9 i1 W
return true;
4 t$ l5 j4 X' |+ Z! u$ e$ j8 ~- ? }
% [0 J3 l' O( }3 J else{3 u( ]" R. s# h# y4 @. v2 U. X& g
return false;1 a6 J" X; y; @/ c- P }
}$ Y9 F1 v$ I9 `2 @
}
2 L/ H0 K/ F# L' f& ]+ S
0 u; F: A# I. z; E1 nint main(){7 E- i3 T+ \7 k& t# B e
vector<int> v1,v2,v;
5 A2 w$ S3 e* r' O v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
1 V. t. I/ k. s# R3 c8 T: q8 z8 m cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;/ u" p( Q( j0 m0 J; Y
cout<<"对v1去重:";% X3 U$ J: D& U
v1=unique_element_in_vector(v1);' Z V+ |, z# x* Y
print_vector(v1);
& H3 n0 Y0 t! z cout<<endl;
! ~9 j6 k' F S# U! x& [ cout<<"求v1与v2的交集:";
+ k8 G" i! {5 k- r v=vectors_intersection(v1,v2);
/ Q% V0 g. N G# I5 V print_vector(v);, K/ u _% v8 _
cout<<endl;
# u; G! F. M9 a3 m cout<<"求v1与v2的并集:";
- L* W7 w( i0 Z0 m( \4 o v=vectors_set_union(v1,v2);' y# d( M$ T: O( g( u; F
print_vector(v);
$ V0 o3 g0 m* Q6 i: }" ]/ e) t return 0;
$ C; P% j- n- K! E}[/mw_shl_code]" Y: B% x! V! _1 X( N& Z) V
|
|