|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
# ~' K0 F/ I; I8 J S
+ o( H6 @) ?3 k( F/ ~7 A0 C$ oC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:* i9 o9 a$ L2 b3 C4 y& ]( j% N
[mw_shl_code=cpp,true]#include "iostream"9 N5 t; a9 D) y, D+ m# f
#include "vector" " c: h4 ^3 p" K) Y# N
#include "algorithm" //sort函数、交并补函数
: ~) t" o# _% t4 c% Y#include "iterator" //求交并补使用到的迭代器
- A4 y6 c3 b- Q! s L+ p w5 f6 |using namespace std;
5 C- U9 I, k. i. T, u V/ a8 w5 n l. N
//打印容器vector9 G( F! I9 ]+ l9 ~' ?2 X4 F3 D0 G
void print_vector(vector<int> v){5 f' r) K$ e5 |$ Z5 K
if(v.size()>0){
. B, N1 X: o2 |3 Z2 ?, ~ cout<<"{";
, y$ u' {& t6 Y/ x: `7 |( [/ b for(int i=0;i<int(v.size());i++){ 6 D H2 v( J: E7 m1 O! ]" q+ I. F& M
cout<<v<<","; / L. ^8 g2 O& E; M4 P
} 8 z, ~ u* B0 j: }' X
cout<<"\b}"; ! R( ?7 i" S/ n u' K* T& [
}
R! j. ]2 ~' d7 \ else{2 l! H+ B1 T2 I( x
cout<<"{}";
! u7 }4 W/ f! Z4 ?8 I3 l) Z }: e: d [8 t# z4 `' [
}
% F6 C) s" B7 Z1 q; @ " ]+ J, m' J0 J
//容器vector中元素的去重
f c0 n% _2 s6 r) m, S9 jvector<int> unique_element_in_vector(vector<int> v){- x: E, W( z/ q0 v! J2 R2 ]
vector<int>::iterator vector_iterator;, s% L+ z" i, \( G! y- [. A* {
sort(v.begin(),v.end());
7 N. g* ]: S5 k) H, N vector_iterator = unique(v.begin(),v.end());) H, T' z* k, S7 M8 o* b
if(vector_iterator != v.end()){& O: Z6 t! o' x q; f# e
v.erase(vector_iterator,v.end());
: Q/ ~4 s2 E, n; _3 g }
. w/ b1 u$ \2 ~- [/ i' R return v;
' R, f- B! x1 \: m, E1 f, H$ V}3 {6 T; T+ t4 R
$ z9 }( v/ S: W, x; D# K( R//两个vector求交集" I5 @, J% [1 ]7 s% B: b
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){) l9 {% J9 R4 c' q' O
vector<int> v;
5 z$ j0 [% @; t6 @0 I3 u sort(v1.begin(),v1.end()); ( o* W; b& Y8 a( L$ h" n9 }
sort(v2.begin(),v2.end()); 9 T% w0 [2 e7 \* I0 o( Z8 w$ D* j
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 p4 l% U# m$ |- T% w2 s' H return v;
* V& I3 m' Q- I$ a; f# x}
. r2 @/ F. T# Y% s+ {' V
, w5 Y o! j2 G- F+ [//两个vector求并集
2 ~" C0 o: Y0 K# b( x0 w7 ]6 svector<int> vectors_set_union(vector<int> v1,vector<int> v2){
& G6 R) z4 u! N vector<int> v;
1 C/ g$ s: `. D6 ^% W sort(v1.begin(),v1.end());
2 G0 A2 h) l) O1 e' F sort(v2.begin(),v2.end()); - R- \ [2 _3 W2 ~7 G" Z
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
% H/ a+ d! a7 I8 ]7 B( z8 V/ K return v;7 h" K; H$ L& W3 S( C' \ q
}+ [: x0 g! f. w+ M) i: M
+ ^6 i+ x7 P5 r( c# t! z//判断vector的某一元素是否存在
+ J6 Z; y' \1 i! ]8 bbool is_element_in_vector(vector<int> v,int element){
' U1 Q9 h- u9 v. K2 y+ b1 {2 e. R vector<int>::iterator it;
4 `/ r6 m K, }; n7 X it=find(v.begin(),v.end(),element);1 F. d2 u. L5 ^* x3 @9 e1 B/ @
if (it!=v.end()){
5 b5 z7 l' n2 a9 t3 u/ q return true;
e# U& i& H- C2 N9 L, F }
2 T7 Y& [2 S; g. ?9 } else{6 F* M( b! W2 c2 [# C" {$ c7 D
return false; e9 k$ V) K6 J0 X, A
}* \4 C0 i# C# T1 j
}
1 K1 D4 J! B6 w+ r1 r- x4 v
" R9 g R5 S, Yint main(){/ _& i6 ~% I$ Y4 w$ V
vector<int> v1,v2,v;
6 [0 ]( g, G3 q v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);# q. D" L& i# T/ I2 D
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;4 N* T; ~ z) V; T
cout<<"对v1去重:";
( \/ J+ H% m4 r+ _8 E0 s" E, j% f v1=unique_element_in_vector(v1);
0 K8 O+ |* ^9 q, n- k8 B9 o, s; B print_vector(v1);9 |' v/ q; F' u
cout<<endl;) R5 d0 L0 h) s# G3 L0 B
cout<<"求v1与v2的交集:";
4 m1 {" o4 ~/ y' i, j v=vectors_intersection(v1,v2);, `! I0 E! Y+ P i, e/ M. F5 [- B3 e
print_vector(v);7 D o1 n* r! Y
cout<<endl;
9 m. D* E* u7 ?0 T cout<<"求v1与v2的并集:"; ?- v8 ]3 R/ l( G
v=vectors_set_union(v1,v2);
) f& b2 R6 b0 E6 Y8 O" x print_vector(v);
5 B) H8 y' @0 E8 W; d3 K return 0;7 g! p; u! u4 O0 m- V! F
}[/mw_shl_code]5 x5 F% K' d+ p U
|
|