|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
3 l/ D* J, M" v# z# I; J
" ^9 d/ Y* A; T; A: K0 W
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
( @4 W: R& D) n1 f: R& j[mw_shl_code=cpp,true]#include "iostream"
0 q" o# v! }* u+ H( {% T#include "vector" 7 @. a7 a8 [$ K* D- \
#include "algorithm" //sort函数、交并补函数/ T3 p5 o0 g; n3 h [+ C% Y! i
#include "iterator" //求交并补使用到的迭代器
; _% x1 ]. @( |: U* \using namespace std;
+ w- t, D( K. J* _, w$ n0 u/ m2 ] 4 s4 ?" Y+ A: {( _+ n1 O
//打印容器vector
$ g" s/ C2 n- R7 Y, Evoid print_vector(vector<int> v){
. B$ f1 N8 L3 f0 J7 l6 a, J if(v.size()>0){
$ p5 K# ]8 ]! Q/ g9 Y cout<<"{"; : r& O5 o) o( v M: ?" n4 I$ F
for(int i=0;i<int(v.size());i++){ 9 J' B' f3 q/ @ K6 T% K- I/ C
cout<<v<<","; % j7 G3 A+ R+ n. }
} P8 R$ `* ^ J2 t: W2 l
cout<<"\b}"; * w9 ?! h/ y' k" \' \
}
" t% `" k W" Q9 Q6 e5 ? else{9 E b! q+ V1 ^7 z
cout<<"{}";
! @ q4 k; C9 Z3 ?) \& G8 @" t. Y$ ? }2 J: K( w. F3 {$ ^% t- f* b
}- P1 A$ U/ Q9 L2 @' F
4 E6 x4 X6 L& k' c. R% W' A" O
//容器vector中元素的去重& p5 c* a9 \( I: R; ~/ F8 K
vector<int> unique_element_in_vector(vector<int> v){; m) {, I, n4 N* {( ^) g
vector<int>::iterator vector_iterator;/ D7 z$ N0 A2 C4 t- d% ]' c
sort(v.begin(),v.end());9 T% t6 y/ j3 T9 i4 ?1 f' x
vector_iterator = unique(v.begin(),v.end());# N% E9 z1 b3 J0 l
if(vector_iterator != v.end()){
" ~' n* y- ~& p" x$ k, {5 G v.erase(vector_iterator,v.end());+ V2 U7 A" X$ \ m& M7 ?' t) O4 N
}/ m, l7 [9 F5 k+ W% Y: D7 X! E
return v;( u- O) n+ a8 R, b# C& B4 q9 b/ A
}
% S @, a6 f$ h: c3 U! _6 w7 l
o$ l& ~: r) V# F. [//两个vector求交集
- a' M" H3 f' n0 f: P S! I+ F$ Jvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
, ]) _9 M- e$ g vector<int> v;
* v: b/ P6 C( u. G# a h sort(v1.begin(),v1.end()); / a5 r9 E: j2 @% v) I( |
sort(v2.begin(),v2.end());
2 H: f3 m( {+ b7 J9 A* H6 n set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
& x- x" A) J4 } return v;
* {1 z6 i4 u6 f! |( A: X) f; k% i}" n. Q# d5 `0 B6 q! \
' _/ x h' y' O
//两个vector求并集
K+ W# S3 f6 |% u3 F Bvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( J9 d; a. W1 G# B/ Q! b1 J' ]: E vector<int> v;
X" R1 @. q& ` |$ r4 S/ H% V5 E3 B! Z sort(v1.begin(),v1.end());
# U5 q( g( I4 [, u sort(v2.begin(),v2.end());
2 a; C6 D- L; d7 `5 z Q4 k' W set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
$ y' ?% c ?! ^% N2 U; @4 V2 U return v;, }$ b1 c/ O7 l6 B s! j* O
}. x: Z" I- V' y, o
5 {1 G, h+ U* `( b% p
//判断vector的某一元素是否存在# o* l# Q! X m
bool is_element_in_vector(vector<int> v,int element){2 \0 ~! j) b+ o# R! ?8 _ `
vector<int>::iterator it;; s' a0 @& e/ u5 M% ~5 e. J, q
it=find(v.begin(),v.end(),element); h0 Y& \& x# K" x
if (it!=v.end()){
0 W6 ]5 ?3 ?9 t9 k2 k. \& _% ~ return true;1 Z& o) d5 I8 v S7 P4 c
}4 }. ?' ~; ?5 R/ c5 G$ O5 A; `
else{, U9 G' q2 d4 L- v2 R6 i4 A
return false;$ c4 X' E0 e: \1 C6 l' D$ ?. L; Q
}
4 H6 e. R Y5 z9 q} C1 U" C) S; j1 O' Z' h! r
" e6 J% N6 A3 d! a, `9 x2 z% Yint main(){2 s# @; C ^* G. b
vector<int> v1,v2,v;) U8 s/ y0 J4 \1 e3 d: R
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
' j" q; a2 C6 s6 Z# _- B: [ cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;: q, ~0 I+ L' {6 C: c1 ~; ~
cout<<"对v1去重:";
( A/ a( H5 Y1 p v1=unique_element_in_vector(v1);8 S5 o7 X8 s+ v8 e) Y3 I4 m
print_vector(v1);
- r0 [( |7 c! n2 `2 |6 Z cout<<endl;8 J j: @5 n7 [5 R* ?# B4 e
cout<<"求v1与v2的交集:";. h2 P, `# A- S. P/ B
v=vectors_intersection(v1,v2);/ w0 j- G( y& D* G
print_vector(v);3 Q5 [8 X W% ~
cout<<endl;
( p( P; a" E: S" @3 z; Y, j$ \ cout<<"求v1与v2的并集:";" U2 A7 V& D6 y" d& x
v=vectors_set_union(v1,v2);
, X T) B9 T: e h2 U print_vector(v);
9 u3 J1 c& I; Q0 v return 0;
2 a. C; f# ^" Q2 B% b" A}[/mw_shl_code]
: J* Q. n/ t# @ |
|