|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
9 j" _# v& |2 J1 f+ w Z g- R1 s4 A' {% V
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
2 q5 p/ J# v" S' ^. y[mw_shl_code=cpp,true]#include "iostream"% S4 v7 S- g9 Y- d. p7 Y
#include "vector"
2 _1 @$ d( L2 ]& ]' r#include "algorithm" //sort函数、交并补函数3 l; c7 y' n, O4 G' V& E9 ?' L
#include "iterator" //求交并补使用到的迭代器
; e4 {5 c5 {2 V* Nusing namespace std;
0 o, k; Y2 ^# _ ' j8 n& c4 A2 M- [! r7 p: S
//打印容器vector
! z. B( B/ j7 L9 ]2 A; s! D9 dvoid print_vector(vector<int> v){
, B0 Y1 h8 V* A, `2 Y if(v.size()>0){
. r: m8 H1 s8 s; S8 q cout<<"{"; / Y" r1 |0 s& @" q5 N$ [! B
for(int i=0;i<int(v.size());i++){
: a* L& G3 }( {/ B# K cout<<v<<","; 5 x5 | \5 U$ h+ W! |' X
} * y" b! Z+ _$ h! L9 `
cout<<"\b}";
, i7 T+ e& @ o/ n# ]: ~% m9 y }
- k$ y3 y$ ]4 C* j. Y# a else{% l# T( D0 }5 j: C
cout<<"{}";: m4 P' n( k9 q" A0 _+ _
}
+ k8 n# F2 F5 | H) V4 _+ o( s8 a}
0 q- }" s( ^! |# w! b2 V $ K$ v% Q$ B1 D
//容器vector中元素的去重: O! k8 a& b3 n/ h# n/ ]/ r b
vector<int> unique_element_in_vector(vector<int> v){
# P$ b" h q ^ vector<int>::iterator vector_iterator;
4 X* Z: W0 k4 Y- |4 p; J sort(v.begin(),v.end());% t5 V" \ S0 X0 B) S6 ?/ x% q- p* x. d
vector_iterator = unique(v.begin(),v.end());; ]- Z+ k+ b% r+ y
if(vector_iterator != v.end()){3 K2 p N7 m7 |2 p" e# |" [
v.erase(vector_iterator,v.end());
6 x! g* @4 G6 \2 v9 P b$ P. o \/ \ }( O8 V$ N1 `, s Q6 i
return v;& c9 H) A& @3 c3 C
}
- b: p" ~( \1 |9 E3 J
( g, Q2 C$ b" w' A2 l! y- p/ }//两个vector求交集0 [* v$ q8 }7 W& w' G* c
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){4 ~( n7 T6 t% ]
vector<int> v;6 e8 z6 @* Z8 G# g8 h
sort(v1.begin(),v1.end()); 9 S: G* i' k0 h0 K/ g% j8 T
sort(v2.begin(),v2.end()); % M" N+ u" s# Q' I! K
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 f2 ^. s& w& y' O/ T2 E% [7 { l
return v;* Z/ n5 l" w* |7 D. [* V
}) M" b9 T; i" u1 J' y& e
, Z" R# @% h/ V& n' K0 h6 G9 ~( c% T5 J) S//两个vector求并集/ g2 G7 z: @+ }. }
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( O0 T& X. K5 y8 g. z X# N vector<int> v;8 y3 q6 G' M0 L P7 d: f
sort(v1.begin(),v1.end()); " M3 z* E, }# Q. ?% s" o9 V" j6 Z
sort(v2.begin(),v2.end());
6 z7 f' @0 N6 y3 u/ Z set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 9 ^ \4 v3 P/ Z% r2 G
return v;! H- R& _) A2 I" C* t7 D" K
}% e v. b& b; t9 t& ^# O
3 R! t' F) O) m, z, L0 r//判断vector的某一元素是否存在. L% y7 v" L1 V
bool is_element_in_vector(vector<int> v,int element){! ]# u0 U c+ @8 I0 h; }( p! c7 `5 Z
vector<int>::iterator it;; `' o$ i: g/ z* i7 I5 W: N
it=find(v.begin(),v.end(),element);
8 e# k, p: O2 t7 X( e0 M) d3 e( f6 ` if (it!=v.end()){5 \# G/ I: k1 y4 l' t
return true;/ h) U; h" Z3 E
}
N7 u$ R1 [, u2 d4 P& E' C' [# o, Q else{
6 ^3 Q* `0 P- y, b& Q' b D6 ]- M+ ] return false; i( z% N! @1 s" ]: R. a
}+ G. ^) q- V) @3 u- ?5 i S
}- y' B" g r7 ^5 A: D4 b+ Z
5 F) y( d: X( @
int main(){# y0 \8 a1 i' h; |8 N$ ]4 ~" D2 O
vector<int> v1,v2,v;8 o2 _3 j, n6 ]+ v! N8 ?
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);: v0 k) I1 \, A" e- i0 k& V0 ]
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
X- G/ O' N# q% h6 Z cout<<"对v1去重:";# D r) S$ S! r
v1=unique_element_in_vector(v1);
4 l' S! b; w% @" Q- x. A# l print_vector(v1);; Q! b- a" `. {5 q. Q- N
cout<<endl;
+ A/ A* Q7 \8 K: a2 C8 R cout<<"求v1与v2的交集:";
. W& G4 D/ w' T2 A! @! a+ H% K% f v=vectors_intersection(v1,v2);( p, u9 e4 v. [4 y( z e
print_vector(v);
' [. l; `( ~9 z( W8 {8 u8 q cout<<endl;) H$ {& ^! U& |$ ]4 J9 J
cout<<"求v1与v2的并集:";7 y. O5 _# B. ~1 b$ T% d
v=vectors_set_union(v1,v2);# w3 E+ S1 g1 `3 o* a+ E
print_vector(v);' [6 r* v0 Z) U! x \9 F( V
return 0;+ e) O" y3 A: b' H P& L: S% c
}[/mw_shl_code]
; s+ t2 D, I! ^# j/ i; R- t |
|