|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) N2 R% g# ^7 q' e) U; ]7 D2 e, Q8 W5 ^
3 D& |' m) k& C# T$ FC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
" c3 i7 i% k4 a/ k& M! `[mw_shl_code=cpp,true]#include "iostream"
7 L4 Y" k6 t( u" h% {2 V& O#include "vector" : h+ N6 _& Z( X
#include "algorithm" //sort函数、交并补函数; y# T; [9 _ _3 [! M
#include "iterator" //求交并补使用到的迭代器
6 X# ?- r6 z* c6 H( @using namespace std;; T7 N- j( D# v9 v3 q2 @7 q3 u
' ?& j% N: T9 P- X//打印容器vector
" \; F/ U( `. F. U3 T- e: e2 Wvoid print_vector(vector<int> v){& z: Y, k i- \/ s( x9 I! f
if(v.size()>0){+ C: b3 ~/ \" L0 U8 l
cout<<"{";
' a( A5 d' w, Q; }2 ^3 | for(int i=0;i<int(v.size());i++){ 5 ]' O8 E$ G, }' {
cout<<v<<",";
8 P5 _8 U' P- b8 ]% V {% v }
( w. m4 V8 y+ e: k+ k. X9 B5 h cout<<"\b}"; : ?, e, c0 m$ E; p$ Q
}
& `9 m" r8 t. P' H, s& t else{
- N2 F, G8 f8 G: T4 x1 c6 @/ E cout<<"{}";/ ~$ E/ K& R" r/ H
}
. X5 D2 \' ]7 C7 e: s. o- N}
7 m/ u7 ^+ X2 K4 a2 N9 | - A+ C) n9 R; \% d' ~
//容器vector中元素的去重
$ O9 {* D# n; p+ y# |4 e+ t; hvector<int> unique_element_in_vector(vector<int> v){! e8 M( F& _4 T( D0 l9 M
vector<int>::iterator vector_iterator;
* T/ l7 r0 K& a0 B) _ sort(v.begin(),v.end());
& b* b( z: E* \( [ g6 f vector_iterator = unique(v.begin(),v.end());
+ t% E' T- w3 U# I% O% n if(vector_iterator != v.end()){. r+ H# Z p- l
v.erase(vector_iterator,v.end());
$ _0 @! X# {! ?4 n. l3 m/ h3 x }
2 K6 q4 V) g' f- x return v;
% a7 l) V( F" S! P5 K, k7 u}
' R4 Y$ Z8 w8 G: \- _. i
H& q3 l7 I2 Y//两个vector求交集" t" Z8 h' J: @6 _ ]
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
6 Q3 G+ z/ B2 i# {/ t* R) t. r vector<int> v;
% L* T3 d, k. s8 k sort(v1.begin(),v1.end()); * L, v) E5 e% f+ s% H1 {8 |6 O0 h
sort(v2.begin(),v2.end()); ! ~; B- k0 E4 |- W1 q/ c R
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 7 Y! v2 \* |# e8 `0 R
return v;
4 U* a- }6 V0 n5 F}
6 r j; w$ m0 l: e' k! j9 Z! h5 V 5 M5 v# y# U- L1 b; d/ y
//两个vector求并集
3 F) [% P' @. B6 O, H! B( l+ K" _vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
& f3 A* m0 v j- \. `# Y% m vector<int> v;
. ?) `/ ?2 ?- t# F# J; ` sort(v1.begin(),v1.end());
6 O7 ^& H }. @8 R sort(v2.begin(),v2.end());
2 y& s4 X. {9 {! W% k set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 7 A+ M* E5 |; _0 j
return v;
* R; H1 q* ^! q6 A3 j- t}
! E/ B* a5 P& u. P' O+ a8 r $ S6 i3 b/ f/ s3 L7 N
//判断vector的某一元素是否存在
; p B+ |' I% y7 l6 B' W. gbool is_element_in_vector(vector<int> v,int element){- n) Z3 s6 Z5 t* e% F
vector<int>::iterator it;
+ C7 f, O6 o- F# y, q+ _ it=find(v.begin(),v.end(),element);
+ Z5 W; v) Z3 A" j" [ if (it!=v.end()){. }, t. K- w Q" e( z
return true;! U* P2 `3 R. Z }% g0 k+ B
}
: {: I8 t+ R2 j# f* H' m' J else{( o: }2 T0 B5 \* J0 z9 m+ X5 p
return false;
/ Z/ U) a! c. C; z& J5 K, ] }
' V6 F* Q4 W* q}
I5 ^8 J) F( ^4 L! p2 n 7 l, L& ?% ?# H# N% {) S) t
int main(){" _( t# K5 L" G$ b- y. M k2 ^# m
vector<int> v1,v2,v;' m+ y1 D' V+ I0 q+ E* ^' J; g
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);# w; H T/ Y, ]5 ^8 \2 ?
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
3 w, _& ?3 S- w5 P cout<<"对v1去重:";/ \4 z; t; h, I3 d+ ~- b
v1=unique_element_in_vector(v1);: Z5 N. ^ u ]7 o' E
print_vector(v1);
) F6 @# y3 Y+ g/ M cout<<endl;, C/ o+ ~) ^; ]+ Z
cout<<"求v1与v2的交集:";- J7 ]' {# x4 t, s
v=vectors_intersection(v1,v2);# t. z; l/ C! _ h7 h- z* S) }
print_vector(v);
2 W$ x. d/ t) z% e# L4 q cout<<endl;
1 x0 r) a5 n, i9 T/ C( m5 M cout<<"求v1与v2的并集:";( p. O2 x. _1 a9 m" `, [
v=vectors_set_union(v1,v2);
; T/ V' b3 H2 E) \! l6 d1 c |3 S print_vector(v);0 g/ K1 s6 B& P9 z5 f
return 0;
; o0 p; Z- [9 u0 S}[/mw_shl_code]' @$ b4 j. [) v
|
|