|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
2 X0 j- F' ~1 M4 D( N
0 {! i! O9 H5 C7 ^* L3 E* W7 mC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
" J6 K- K: l0 `: A. z( D" i[mw_shl_code=cpp,true]#include "iostream"
. m, U7 L. u4 i$ {#include "vector"
/ T+ W# [4 C: |! c c- G; r#include "algorithm" //sort函数、交并补函数( Y. f5 m- u' S' p; _
#include "iterator" //求交并补使用到的迭代器. b/ k( `7 U+ P5 _
using namespace std;: p$ T( w7 T& @
$ D' g5 @# j( K6 @# ?% K. F, C//打印容器vector6 H" V9 F: y8 S" R; S( d( ~
void print_vector(vector<int> v){- B2 ?: P o8 K
if(v.size()>0){' U7 \) H: w+ l, X! P7 @" N4 ^
cout<<"{";
$ A; _' o7 b* E for(int i=0;i<int(v.size());i++){
5 s5 R* v O9 w0 l8 f cout<<v<<","; * r0 |5 W0 v6 A3 G8 a
}
8 z' ?) s9 V) [0 [+ @/ x/ [ cout<<"\b}"; / {" H. ~' b1 F" Z, ~# b
}: G. x8 {: E+ \9 V, [, |% i5 N* y
else{- r6 r; C2 C& c2 ^- b! t$ [, B
cout<<"{}";# Z/ V0 d( \' Y
}
/ w. H4 _' B4 T- a2 r. R v}# E+ z* `3 n+ D/ g7 I
" _8 y5 e4 i" q H//容器vector中元素的去重
: u$ ]' K5 n4 v0 q0 ^" h0 m Hvector<int> unique_element_in_vector(vector<int> v){( K) U' Q s4 m9 C' i {
vector<int>::iterator vector_iterator;
K+ y4 z7 N6 M sort(v.begin(),v.end());" }: {/ S7 N6 Z
vector_iterator = unique(v.begin(),v.end());" W, V, I% g5 O& F
if(vector_iterator != v.end()){
9 `' @ D) \$ Q; ?( i! j v.erase(vector_iterator,v.end());
1 Y& {9 D5 @& D% I }
+ m e5 \5 W' ~6 o return v;, L# _6 k' Z2 i! l) }2 G# J" r
}
1 x( C w/ R; o4 \1 ^1 P % R$ a0 b% z3 g5 C+ {) w9 C
//两个vector求交集
( t8 Y4 {: P7 @ A$ i' pvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
, S" s1 O+ Q; M3 Z1 ?) J vector<int> v;' v5 @: M, N/ a+ P- M
sort(v1.begin(),v1.end()); 0 w R+ z1 H y$ I% W; ^2 z0 K8 W
sort(v2.begin(),v2.end()); " w4 y/ i7 P+ p
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
: {0 P* @$ x9 s; y9 _ return v;# D+ u. e) H! F, K
}; v/ j6 ]4 l9 W# J
- }. X9 I k w1 U# k
//两个vector求并集
" \1 V* i2 \5 i9 r/ w: W% O6 Yvector<int> vectors_set_union(vector<int> v1,vector<int> v2){, R. t# B- t$ G* b% i1 k* B7 `
vector<int> v;, F: f8 v# e% ^
sort(v1.begin(),v1.end()); / n, E; J& C8 P5 u- n
sort(v2.begin(),v2.end());
* w$ @( b( d1 w: d2 o set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ; D+ H3 Q! A8 M1 T: L( F
return v;0 Z% X( e5 \ e" y! X, {0 S2 z
} B7 A+ y" e& l9 t8 ?) n
7 b" B2 J& {6 C* w
//判断vector的某一元素是否存在) i0 `0 F G( \8 I' r. R. X/ `
bool is_element_in_vector(vector<int> v,int element){8 ?0 ~/ c6 y$ P( D7 Y
vector<int>::iterator it; C) N3 N. J- J/ {' _3 r
it=find(v.begin(),v.end(),element);" L/ \3 G4 \( ?4 p* U
if (it!=v.end()){
b% F/ f7 u# w& z$ o+ s. H* Q9 F- | return true;7 R! K$ @- Q0 R) _" s' C
}
! |* d3 o% D8 |$ T3 E- v else{6 a' F" ]7 h7 h# V
return false;
& B& w: K3 t( K' G }
$ {; l' A- ^& \}4 @! ]# i P% K$ S
6 t1 D. J# d+ s; Xint main(){, T! Y/ _0 I! j
vector<int> v1,v2,v;7 |: r0 ?4 h, _$ u2 T l
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24); I; G% H: W3 {3 c
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;* R7 ~ G. `3 K, A- c, ]4 F) l2 Y
cout<<"对v1去重:";
2 r& R( ^. V/ B7 M2 j v1=unique_element_in_vector(v1);
s' _. u( @# u7 P print_vector(v1);
- ~; ?, \. q; L5 I# i cout<<endl;8 u" `' Q7 O* C: V/ x
cout<<"求v1与v2的交集:";+ r% ]$ M& `4 T( B8 I6 [$ ]
v=vectors_intersection(v1,v2);! x3 I, V) x0 l: G
print_vector(v);+ L0 ?6 T4 k: b5 m( H+ a$ R* n
cout<<endl;
- w2 F8 w) y* \: ^- O3 j cout<<"求v1与v2的并集:";# N' T# Q3 A b# a' o6 |8 ]
v=vectors_set_union(v1,v2);; Q* s: _0 D3 T: K+ E
print_vector(v);
% b( U( E) L. B$ p5 e$ j7 g return 0;
5 H- B3 j- [4 r' h: f0 T6 I% M}[/mw_shl_code]4 @4 L/ v& t9 J
|
|