|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) R( L7 d4 _8 s' n( \) c' m9 q7 m9 x3 Y* l' E+ K$ T0 f- w
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
+ f$ t8 `* I( c0 M0 i9 [[mw_shl_code=cpp,true]#include "iostream"
/ h/ R# T5 v$ y7 V0 Q#include "vector" 3 D/ R4 ~: \& n K q7 M5 ]
#include "algorithm" //sort函数、交并补函数. k# Q. j9 D9 B8 {6 a$ X: `
#include "iterator" //求交并补使用到的迭代器 T; t% O9 S" Z5 q
using namespace std;
+ Z1 i5 P$ t- K) v
( w! x" T* A9 |1 B+ |: S//打印容器vector& C8 G/ u3 r! d1 R8 u1 X
void print_vector(vector<int> v){! ]3 d# _% p+ U" m2 \
if(v.size()>0){
& O3 U& l3 O% L8 q cout<<"{"; - M8 y( y& l' x
for(int i=0;i<int(v.size());i++){
2 N% E6 ^+ B- v+ Y' t/ G cout<<v<<","; ; z4 g) O0 ^+ {1 j7 e% v
} . w8 z9 ^0 p; r4 ?& ]+ k
cout<<"\b}";
% C) ^5 ] @6 S/ [' x }
: ?& e/ D: t- ?2 `) V" U else{
. R- L% I) R# @ cout<<"{}";6 @2 N5 s+ H- ^
}
1 F6 F1 I1 O$ n6 F$ M: V}- x- ?1 X; U* x8 d
( n( n& }! `4 g( S) G$ a% J/ d
//容器vector中元素的去重8 `4 o, m; k* k- K5 T. b% X" i
vector<int> unique_element_in_vector(vector<int> v){; K4 l: Y0 _# H9 A/ ~
vector<int>::iterator vector_iterator;
8 z9 @, Y. ?! O2 A sort(v.begin(),v.end());& I$ D+ [4 d8 R4 V* t1 R
vector_iterator = unique(v.begin(),v.end());
7 W2 o6 A3 m* ?, c$ m if(vector_iterator != v.end()){
2 r& {7 a$ P+ ?# @) l& z7 W v.erase(vector_iterator,v.end());; [- x. \5 ]6 G5 `& t
}
3 H" S5 r5 r1 J2 r return v;4 n: T% V& q2 [3 K5 S. q
}
: @9 b ~6 } d6 \ 5 v, G, }6 b- g; Q1 r0 ~% M
//两个vector求交集
" q* s: L k7 v% }( x v/ J" F! Z8 Vvector<int> vectors_intersection(vector<int> v1,vector<int> v2){& q' \6 P9 F+ `( k: Z
vector<int> v;
# i, F! [ {; R9 f9 q2 L' t) b sort(v1.begin(),v1.end());
" x4 Q7 k( K2 i$ I& g) Q sort(v2.begin(),v2.end()); 1 W. E: X" ~ G! U8 @
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- W; C* k( J8 n/ x return v;: ^/ N. Q1 B9 a' }/ ^. u
}
; s" O+ m' d9 F8 |; v* [; {; ~0 h- a - ~ O4 C+ S- d* q( S7 Y
//两个vector求并集
; l7 C. r7 R+ E6 n" H! yvector<int> vectors_set_union(vector<int> v1,vector<int> v2){4 T2 f6 m$ R) O* Z
vector<int> v;
8 b; T- j& I9 l( w' ~ sort(v1.begin(),v1.end());
8 n( ]1 D0 k# u sort(v2.begin(),v2.end());
+ d4 m7 t, R5 Q7 o$ T set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
3 d: }+ r. b9 z* i5 k/ N return v;
' W1 {, ?( `( j- l. V}- H% i3 O/ L9 H. ]& w$ Y' @% _$ l
% \5 \$ z; j2 m( u- A
//判断vector的某一元素是否存在2 C$ J" Y7 Y4 R
bool is_element_in_vector(vector<int> v,int element){7 I! Z& e" k w) a6 ^
vector<int>::iterator it;5 y- C- L9 S$ u2 z3 N
it=find(v.begin(),v.end(),element);
7 Z; e2 B3 R4 u9 @, p+ H if (it!=v.end()){% @/ v# `4 x1 t a+ \ R
return true;0 a, H: a: p5 c \
}
6 B1 L9 V4 f. W' {9 R else{" T& z& _) x o7 B
return false;5 P* S! t. ]; D! e6 d! e( w
}
* O5 t7 f2 q. k# K1 ?1 d7 h}
( z( v& {9 a: L2 j9 X/ W* b % q j K0 v% m2 \$ s7 U
int main(){1 u9 J3 K" @# d8 f0 p3 \
vector<int> v1,v2,v;
# n/ w8 Z! D) V* F; f* y% J v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
% G/ a1 p& v' q/ v2 J cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
4 H4 k3 C, w | cout<<"对v1去重:";
6 X v3 J7 k P) ? v1=unique_element_in_vector(v1);
4 T! p: ^1 t, Q& K print_vector(v1);- W0 c( |* m' `& A- x
cout<<endl;# z1 D# P* X% S2 y0 i8 K c0 u
cout<<"求v1与v2的交集:";) I( P2 L* M( D' h& i
v=vectors_intersection(v1,v2);# L7 s8 i; @, p/ a- i2 o
print_vector(v);) Q$ @% c0 s3 P3 N j
cout<<endl;
/ [. d: j* t+ V6 z) C! m) G. \# x cout<<"求v1与v2的并集:";1 a7 v. g& ?$ P6 ^
v=vectors_set_union(v1,v2);" P8 \2 Y% @ ?5 g0 ^) J
print_vector(v);
: I6 S) A+ u; U1 W! n0 k) ^ \ return 0;
- {3 i3 j. Y' x}[/mw_shl_code]
8 F1 K4 ^0 @8 } |
|