|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% G+ C! k: K3 ~' {$ b* s& u% ^4 V4 t' L8 x' Y- v+ N0 ]
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
) v- B0 b3 [( C+ O[mw_shl_code=cpp,true]#include "iostream"; c* `7 V( B( y3 @0 @8 z) Z
#include "vector"
6 L6 R6 Y% X) w! q/ w#include "algorithm" //sort函数、交并补函数
5 y p! v0 G& R#include "iterator" //求交并补使用到的迭代器
: V* Z) m4 V! h! Pusing namespace std;, d/ V( c0 |+ \/ I& x4 I
8 J' O" u9 `) O' I: W1 b. c
//打印容器vector( ]( S+ Z( n' \. d
void print_vector(vector<int> v){
; m S0 u$ H) |- d2 e. V& o if(v.size()>0){
; C( K: N% Z$ ^: s, H, v cout<<"{";
/ A% D8 R3 _! }8 t. H/ y for(int i=0;i<int(v.size());i++){ 1 T3 d4 I7 n9 y# H
cout<<v<<",";
, j' r3 \ ~) s: ?- z }
4 [& X) Z$ q2 H. ` cout<<"\b}";
& `' e' o; j+ j4 E. P; a }
) C4 F% m, x2 a. U7 R5 z) }' P else{
1 a9 M1 l A( f# L! Q0 h- D cout<<"{}";
. k& x; a8 G5 s' J( X/ k5 W' X7 m6 b }. ^: v$ i! h' X9 Z
}
+ U+ \1 W0 n8 c
. C! d0 ~* ~+ g+ d8 |/ N' N7 N6 s//容器vector中元素的去重7 r' z# Q: `) |$ y' [
vector<int> unique_element_in_vector(vector<int> v){) E$ u* _$ k/ g5 v# z
vector<int>::iterator vector_iterator;% E Z. s b+ |' K$ ^
sort(v.begin(),v.end());3 A$ V& y+ {( Z+ f! p1 G
vector_iterator = unique(v.begin(),v.end());
3 J4 Q- }0 d, j3 q if(vector_iterator != v.end()){- [1 t( W: }) M
v.erase(vector_iterator,v.end());' Q$ h: C/ u; }/ }$ F$ O& Z
}6 p- C9 M, z$ g' s
return v;. \: p1 u3 F, b) {. g) w
}
1 c1 w- S) }, H$ B7 _4 e8 C! ` 8 @' `) z0 ^. Z+ A3 P; E" k
//两个vector求交集1 A2 J! h$ X+ ]) R$ J. V
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){. w' p1 H6 S- X# [: b
vector<int> v;
7 n" F9 N2 ?5 h7 y2 s sort(v1.begin(),v1.end());
6 j7 ?4 c. Y% \0 O sort(v2.begin(),v2.end());
1 j" x/ z. J/ I set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
: }4 w' q6 y. I1 q: M. g8 |* j+ j return v;2 m9 _8 | T4 K6 t0 G
}8 Y w/ L0 ?) e" M/ W3 n
/ H5 U- F" p" t+ f# a! U2 w
//两个vector求并集
% i. ~+ j1 Y; D4 J: x# b3 zvector<int> vectors_set_union(vector<int> v1,vector<int> v2){3 ~% L6 W: E* V( a; H0 k0 J
vector<int> v;7 e5 r4 N* @; M! ~
sort(v1.begin(),v1.end());
5 x0 x& W: ?( [; e sort(v2.begin(),v2.end());
9 O5 q4 l5 n% n- _( _% e set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
6 i8 o/ G0 K! w" X7 Y' A: l return v;) Y0 L1 D6 o, ?
}6 e0 D$ s( e, y( x0 C
# [1 U* N4 q7 U: z- p" G L* h
//判断vector的某一元素是否存在# m( y+ g1 ~* G/ ], k' H" B% I$ s
bool is_element_in_vector(vector<int> v,int element){; S8 J( c$ x- F/ X: ]4 n
vector<int>::iterator it;
7 U e2 ?- }- r! J8 D9 p4 n it=find(v.begin(),v.end(),element);/ k2 _5 C) k* u
if (it!=v.end()){! ]9 V1 D/ P' `' H( u; i }
return true;% Q6 q5 V+ i/ B0 k5 V. b! M
}1 C! V* V9 ]; U5 a7 D4 s8 N- ]0 q
else{
# n' g2 S* I2 X- A: S return false;
& o% H7 ^! \9 n& \6 e3 o. v }; {) i4 a9 _1 m0 m1 j; G A
}
+ H4 N. P& u, e; t7 ^6 i % L' u6 }2 U7 h+ q! ^0 p& W5 D
int main(){) |+ l( g6 j+ i7 l5 m
vector<int> v1,v2,v;
# F5 w/ W: x$ j6 Q: \; A v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24); f" v U: ~& A+ V/ Q1 R0 P3 x
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;2 n( H3 d6 o" R! I% \
cout<<"对v1去重:";
8 N. W$ ^6 E+ ]; \3 U* d v1=unique_element_in_vector(v1);$ u2 _* d4 @5 w' u! d9 G
print_vector(v1);
5 N+ g/ @+ Z4 w- N4 r; k% S cout<<endl;# I) x$ O0 n/ [2 N" [: }3 O: R" F
cout<<"求v1与v2的交集:";
: z# ]' K) K. [1 [ v=vectors_intersection(v1,v2);
' d4 M: ^9 w# O0 ] H/ U, B/ u print_vector(v);$ O) q; A9 P5 B/ Q) }
cout<<endl;# {) Y4 o4 w8 d3 t+ x9 W
cout<<"求v1与v2的并集:";
0 ^2 O! L) t- r5 d$ m v=vectors_set_union(v1,v2);
* C; |4 B/ n4 Y/ i, ]: C print_vector(v);& r0 L1 n; |" A0 u3 r
return 0;! h8 A, A2 l- |1 i3 |- k; k
}[/mw_shl_code]
$ A- [& [; Y# r/ R5 S. l: E4 h# X |
|