|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 e+ ^3 T& R8 _ M) D. a/ F# ^
0 ]9 z3 t( P5 [3 H0 ~
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:. \" ~3 Y( ?, @! S& f
[mw_shl_code=cpp,true]#include "iostream"
1 ], R2 I5 G O#include "vector"
: {7 ^3 I& q: c% O# c% [6 N#include "algorithm" //sort函数、交并补函数
) k$ w1 o" P# d2 f$ N#include "iterator" //求交并补使用到的迭代器9 j8 a8 Z M6 \* {; S& Y. A
using namespace std;# O% H0 w. I" Y. |& e
8 m+ O" c/ A+ C- b& W9 v//打印容器vector
# c7 l- _* L& J ]void print_vector(vector<int> v){1 C2 G$ v! p* V, T& q6 s# D
if(v.size()>0){- d& |0 Q5 g! x9 v/ Y
cout<<"{";
( ?" N+ b8 l! t% Z; b! R5 v6 b. O for(int i=0;i<int(v.size());i++){ P# Z! U3 p2 N+ S3 w9 b
cout<<v<<",";
4 b) K! A( r. J. i i9 |# d }
8 c+ y- t w# ^) K7 ?; h cout<<"\b}"; 5 q' ^: I$ {# I4 I0 X2 ]+ B$ E. Y8 M
}4 J+ O& \9 W! b( e; ] U
else{
3 s! O" E) I. ^+ e* Z cout<<"{}";3 R. t& W% U8 Z" Y
}
( j! u) _ t. H* s) N}
! R9 C/ I( s% N$ [ 2 W! H9 _; n; ^ G* I) k
//容器vector中元素的去重# {9 _' h9 }" R& f; u! b! w
vector<int> unique_element_in_vector(vector<int> v){
( o1 k" B; ?6 o$ a. [ vector<int>::iterator vector_iterator;
3 o; z' L2 I+ c% m# P+ f; C sort(v.begin(),v.end());9 u7 ^! l" k2 U7 r
vector_iterator = unique(v.begin(),v.end());$ N7 r0 H, i( P0 g- M( [4 P& W
if(vector_iterator != v.end()){
( V' h# T. U/ M/ u4 n v.erase(vector_iterator,v.end());
1 ^* t3 k2 i# Q: t7 r& a }! Z$ P/ H$ k5 w# M
return v;* N" @* H* ?2 d4 z5 h
}& E1 Q. D% H L* Z. p
6 U1 g7 J8 ^5 k3 t
//两个vector求交集
" G/ n* J6 U$ r; b& ~+ ]+ hvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
' Y& a6 [! m3 r+ I$ T- Y vector<int> v;
4 ^! p- k. _$ D; ] sort(v1.begin(),v1.end());
; }- b7 z& J% u; D' |2 g+ N7 h, G sort(v2.begin(),v2.end()); 5 Q# o: v( J; v9 ?$ w9 U1 j
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) ^# e8 e, h+ D( ~ \8 B4 o6 W return v;% U3 e9 a/ `! P* j9 j
}" X2 [' J% W6 ~4 W3 {: s+ J; Q% N
; V; l7 c; I9 c" ^3 Y( G0 b" A- Z//两个vector求并集; S9 E: H' w0 W: y; W- z
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# }! }0 U* I" D; q8 B6 y9 d vector<int> v;
2 f, l% h# @2 J) f, r- B( W0 R sort(v1.begin(),v1.end()); 3 B* `& |/ A+ {2 K
sort(v2.begin(),v2.end()); & l, y4 X6 ` d) v6 h. j
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 . ]0 F V* H' d/ i+ a/ [
return v;
6 f0 B& O: m5 V4 A5 c}! [/ m2 i7 n' _4 U/ d
+ E1 t4 _4 M6 H* ]! n
//判断vector的某一元素是否存在+ }; w& C2 I3 g" Z& {1 f
bool is_element_in_vector(vector<int> v,int element){, r) n; o N7 G' ?% Q
vector<int>::iterator it;
0 j+ z& D. g T1 T8 y/ Z it=find(v.begin(),v.end(),element);# `5 F2 O2 _/ f/ i- W* Y
if (it!=v.end()){) P6 i$ y5 c$ G
return true;
) U" L& [% b2 K. r" ~* [4 m% I }
2 f* c1 ~- w9 G else{; a' I5 A* i9 y$ \ F3 X4 ^" D
return false; n$ @* s; b9 I
}
% J* o2 Q" s6 z1 t8 W, \}" G) ]& Z9 h) `- N
- N& N9 O4 f, h& E
int main(){
, Y1 h! M: N% X vector<int> v1,v2,v;) H3 k8 k8 z2 t: P3 F% P
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
( p) J; r; Q) t) `( N: I9 P cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;% R' d, ?+ N/ l; H6 n% k. V
cout<<"对v1去重:";
' `9 D# q# `* z5 { v1=unique_element_in_vector(v1);
7 s) C# \ X+ b$ V' e print_vector(v1);# d: ]6 p+ v. ?: u3 G/ w
cout<<endl;2 `7 ]0 s1 F% }. Y ~' [) ]; v; S- [4 n
cout<<"求v1与v2的交集:";' N$ H$ T _& W9 K; A+ P$ r: s' U
v=vectors_intersection(v1,v2);: I( X5 j0 }: s1 n# ?; n. l
print_vector(v);. Y& D( s; R* N2 Q: G+ E1 b! Q- O
cout<<endl;
6 r" c, x& w9 n3 Q' q; {, \: D cout<<"求v1与v2的并集:";7 t5 l9 k7 m% c( @1 }: {% B' ^
v=vectors_set_union(v1,v2);4 |# N l5 p3 j4 Q2 F! H/ m6 e. M
print_vector(v);- t( R2 M" i0 e* p
return 0;
" b* c5 m0 \, j. L) E}[/mw_shl_code]" M A& S+ d0 p! ^( U
|
|