|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
`4 N& O( Z% X. k; T
- d4 D; `& X2 ]1 B! ~! |6 d! F% W4 Q
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
T* z2 U4 `$ Q7 Z6 b8 R[mw_shl_code=cpp,true]#include "iostream"
1 S. Q' p9 u7 O( t% @6 q+ G#include "vector"
6 I1 E& q2 s: j% [: C6 |#include "algorithm" //sort函数、交并补函数: B# o$ Y* C; c# B4 ]
#include "iterator" //求交并补使用到的迭代器5 | }; J( ]# V% L: Q2 q
using namespace std;
1 @% w" e$ w4 E" a* j7 A- ]3 e
- ] t" e9 n% J2 v4 \( X+ a; u//打印容器vector7 E8 `& u% W' p
void print_vector(vector<int> v){- t }8 h" i$ p3 _0 ~
if(v.size()>0){' x7 J0 h* x/ ]- e4 d
cout<<"{";
9 q$ g7 V5 W; ~' s$ A: Y0 U& H for(int i=0;i<int(v.size());i++){ . m' M5 l: E7 D/ K
cout<<v<<","; 8 @ Z' B9 S6 I& d# R7 n" I, R* y
} 8 l7 A8 @) \; H$ ]5 ]. J2 p2 I; u( k
cout<<"\b}";
7 M4 f% z1 d3 H0 P$ Q1 j; P( X }) C& A, a3 g- x" {; _; Y' ]) L
else{
% C) V8 H# @5 a7 ^- q% \ cout<<"{}";
7 ^+ e+ b& j/ U. o- w9 \) o. ? }" ~8 {8 v, b$ f8 \- T5 ^ l
}
0 }# i q2 V: o0 W8 ~
/ e/ d& {+ @! w& u//容器vector中元素的去重0 O1 ?% M. H. z8 K d. p i+ r) F
vector<int> unique_element_in_vector(vector<int> v){
$ J- {; z9 x. K0 o vector<int>::iterator vector_iterator;
$ j' x2 P0 L6 R; R# S$ N sort(v.begin(),v.end());
! ^6 b6 u" E* N$ R' x vector_iterator = unique(v.begin(),v.end());
1 P( X' x4 {. j- ^/ j: \: M" k if(vector_iterator != v.end()){* }' l0 @. P6 a+ @
v.erase(vector_iterator,v.end());4 l$ h' K* s2 O% R; d% B) G9 @
}
" k- [# ?- S- m* S return v;
/ a1 t6 `: d2 P6 i# q}7 M/ V8 a* G" \; w8 w: Q* z
/ [( f3 Z" g+ {: R$ J4 l
//两个vector求交集
& X8 J1 ^/ e3 M5 ^. U3 fvector<int> vectors_intersection(vector<int> v1,vector<int> v2){! M, W/ Q7 P, p' ^( n% \) B D8 R* j
vector<int> v;- S3 O7 y$ V3 T2 _
sort(v1.begin(),v1.end()); 9 [- r. T4 t/ _" Q; i9 Q
sort(v2.begin(),v2.end());
$ T4 _* x% b" U( k7 f set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 % b, w' W: L. h! J' ]
return v;8 r* i5 ?4 y+ P" w' z, f
}+ U' j& h& M' ?8 \
. @0 k- k9 f: Z) H L+ u
//两个vector求并集
- N' g9 R7 C: P/ y, }# _7 Wvector<int> vectors_set_union(vector<int> v1,vector<int> v2){: G v+ d* I. C" Y, |& u
vector<int> v;2 _: U0 M: T' U: f" q
sort(v1.begin(),v1.end());
( l8 ?' p5 r4 K0 B sort(v2.begin(),v2.end());
. ~9 _* H* T. `" V: n* N+ R1 m set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 . x$ v. l5 r/ j+ `* n! X$ g1 B
return v;/ s1 N! W& K7 N7 |2 H" {
}. G! N1 E: k% l5 e3 L% [/ }
. o' R) O7 M0 a) y0 b1 @
//判断vector的某一元素是否存在
& u8 w) ?% z4 N9 u: abool is_element_in_vector(vector<int> v,int element){
7 {& M5 t: _1 U! T$ S vector<int>::iterator it;
% ~$ ?" d4 R# J$ V# F it=find(v.begin(),v.end(),element);* Y" M+ G9 @9 x7 S; X
if (it!=v.end()){
, k6 B" p: b Z8 N% Z return true;) J% o. }0 l$ r! h. {: W: |6 l7 X
} g( z( H: t3 Q; N; R
else{
1 V$ ?' L0 U! H" ?9 T2 b return false;
6 N1 E% I3 w8 x8 ~' i( u& A }, Z' r5 l2 \$ i. L
}7 u' c7 L" h u, ~- D; H/ S
. s' j7 e/ i, A( I+ e) Vint main(){8 c7 v+ J c+ u+ A- G" q1 J
vector<int> v1,v2,v;3 ]! }( Z& C+ W9 V7 h9 a% j
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
[. a1 x- \: y x cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;! p" n5 K4 v, i0 n
cout<<"对v1去重:";
$ Q1 K3 }# f- H8 M v1=unique_element_in_vector(v1);' \( b; I$ X! I
print_vector(v1);7 R2 M/ i; e- F6 h7 S2 U, x
cout<<endl;& s8 ~0 f& Y, o, O* k
cout<<"求v1与v2的交集:";
) H v) B& g5 D0 v% \. i. E v=vectors_intersection(v1,v2);6 U c0 e8 u2 H# y9 g
print_vector(v);% I6 x3 d' I: Q3 V; {) P) f
cout<<endl;
9 k/ e4 }4 k1 C: f, c cout<<"求v1与v2的并集:";
* Z5 u+ D2 {6 m6 @' J( W v=vectors_set_union(v1,v2);
2 p+ A% a" S+ ^ print_vector(v);
; @+ }7 j M. G+ j return 0;9 Z- H5 q+ _' }5 G7 J
}[/mw_shl_code]
( ]% |' m& Y. n' d! ~8 n |
|