|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
4 S4 ~! L/ ?1 }) v3 e% d
% B" r: [+ x! @9 Z% ]7 D
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:8 k/ l; ]% H7 f6 Y/ m
[mw_shl_code=cpp,true]#include "iostream"8 z, e1 W$ r4 K4 _6 A
#include "vector" 3 v- j- o* L( S& l& g; {
#include "algorithm" //sort函数、交并补函数9 S* w- ]0 O9 ?$ {( E
#include "iterator" //求交并补使用到的迭代器1 h6 [1 o/ j4 F; h8 Y
using namespace std;
- o* G4 }( d( [! m5 e3 R# F
h( W) e3 y h3 w: r) q+ Q3 M//打印容器vector* d B8 ~! @6 K7 y
void print_vector(vector<int> v){
% `4 l" U# h, Y if(v.size()>0){) l7 M( k2 T* T$ N7 t
cout<<"{";
1 W. G# j' L, ^ for(int i=0;i<int(v.size());i++){
2 h" `6 `/ x+ I9 y* D/ s; R cout<<v<<",";
4 z) W6 T1 y6 ~+ |0 o4 p } 3 D3 y3 H0 ?9 }' j* K4 Q
cout<<"\b}"; 4 ?' N: r' U+ p! ?6 ?3 l
}$ l7 [0 t4 w6 N6 |) _
else{
# N' c( A6 U! Z4 e/ |& {; Q cout<<"{}";
) }1 [% O: A7 f2 L7 K5 f: K) @ }
2 l1 w/ j3 Q' F6 Q& o$ e+ a}0 a& \" ~6 y+ Y% g" T' h) d, w
1 ?. w0 [3 \* ^' [0 I//容器vector中元素的去重
9 y/ r6 x! ^, I& m r) Wvector<int> unique_element_in_vector(vector<int> v){, W8 s3 i& R% t6 \+ @* n
vector<int>::iterator vector_iterator;
) ?( r C! g, L* f" X% a2 m6 q' E! N sort(v.begin(),v.end());
4 \7 N, d/ F- w; l' }2 P* j5 X8 H vector_iterator = unique(v.begin(),v.end());* [7 v) N# ?3 d7 x9 V& Q# e2 [
if(vector_iterator != v.end()){2 M5 h1 m8 ^" O1 h# t) P
v.erase(vector_iterator,v.end());
/ z8 Z! c: ^$ G5 m4 j1 w }, m n: T( a- h
return v;3 z' j8 Y" q( e, v; z
}
; U' S& i ~' p# O' u 4 u$ t$ q. t$ |$ E) Y
//两个vector求交集3 e5 V4 N8 {! [; v
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){9 z! L. d a+ L' v
vector<int> v;
. V* q4 Z x6 L# K sort(v1.begin(),v1.end()); 4 K1 _3 E( D+ b. q: N% ]
sort(v2.begin(),v2.end()); ( L4 I& d: Y8 k D$ h# X
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 n) \! I# G& n; C4 @; q' B# M
return v;& C+ Y7 D$ U2 ]$ D! [* ^# I( d9 k
}+ b1 O- T1 x& |" w
0 R% W" s+ u2 L: U+ ]) f$ [8 a! X: S; |//两个vector求并集
1 H1 k7 q8 E9 B1 f5 J+ B3 mvector<int> vectors_set_union(vector<int> v1,vector<int> v2){0 @" ?9 Z9 q0 }' S6 \& C
vector<int> v;# X0 m: X- g3 t
sort(v1.begin(),v1.end());
# K7 e" t+ ]' D# _1 z1 U4 B! | sort(v2.begin(),v2.end());
- } v! |1 U! C8 K5 K3 H9 J set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 8 O" T6 k: h3 K4 m) Q/ _+ l! c
return v;& Z5 h+ R' [, w. R3 c
}
% z( }- T6 u& ]- |5 {8 B9 j8 \2 ` ' i$ q& B* x! h, C6 k
//判断vector的某一元素是否存在
* n) C2 r- h8 E; e+ xbool is_element_in_vector(vector<int> v,int element){, f3 c8 \& R- H( F+ f* T# s9 u1 `3 m
vector<int>::iterator it;
2 ] N8 Q" y, W* N U it=find(v.begin(),v.end(),element);3 p7 `' F. z- U* v( p
if (it!=v.end()){
~# w& w9 w7 k return true;3 ^5 q+ R* L, ]3 }$ {* l' j5 @% N' N
}' j% N7 i* e6 I+ A# Z9 T3 H3 Q
else{
: o s/ Y1 L9 V( B/ V. |& b% D% G' ` return false;; ]) g! w [6 ^& Z
}: T# Q6 J$ B) p) o7 b: S! Y+ ]* `
}2 Z) P2 x" y; R. g" x2 b5 X2 H. T
2 a4 H$ Z2 e& _& V5 D4 H/ Vint main(){/ e& {/ a, a9 G: V9 M
vector<int> v1,v2,v;# x# [- }; j/ A- t
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);7 a% Y& S1 r+ [2 o- C$ H
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
: @8 i7 [7 a g cout<<"对v1去重:";& {. Y j" v1 g+ b( z. w7 T
v1=unique_element_in_vector(v1);) h; h6 g$ p5 N+ u+ X
print_vector(v1);
. U& Z' g6 O! h& ~ cout<<endl;( z1 y+ l% m2 W; v% X8 B) W4 F
cout<<"求v1与v2的交集:";
, F- e# ?2 u* c$ k- A v=vectors_intersection(v1,v2);9 u* g# i- E0 N4 F
print_vector(v);1 E/ |1 i: ?( a6 ~6 ?
cout<<endl;" }" C5 k3 J- x9 }
cout<<"求v1与v2的并集:";
8 o" @9 i# C2 Y) A! s* b( j" ~ v=vectors_set_union(v1,v2);
6 O: t0 ~: N E# u1 j print_vector(v);
1 @( ^: c" s% w& H4 [# u5 T( `5 { return 0;
6 d+ o I0 r: }4 \6 O}[/mw_shl_code]" a3 m/ x% {$ C d P" B
|
|