|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
9 v4 o+ i5 w- B% C! k
/ |5 i' }' o. c! c
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
) f1 e) ~) _1 I" T[mw_shl_code=cpp,true]#include "iostream", ~6 G$ ]2 f: m: X$ p8 T- ^' C: ~
#include "vector" 1 q8 [ D. n2 \4 V, G9 k4 J
#include "algorithm" //sort函数、交并补函数
2 v2 {$ c$ G* @3 ?) f/ j#include "iterator" //求交并补使用到的迭代器4 u0 H" n# y. P+ z6 Q& Z' ]
using namespace std;, A5 _) N) _0 }; B
: V1 R% q. ~& D/ F2 I5 J( ?: H$ o//打印容器vector& s2 T7 V4 c/ u% I6 O
void print_vector(vector<int> v){4 M3 K% m- T% I( ?, p" @( ?: Z
if(v.size()>0){
$ L& Y, D o% F& j cout<<"{";
' u3 Z! S: o: b1 a" d; [ for(int i=0;i<int(v.size());i++){ & N) J$ H; H0 P- \5 B$ S! g2 Z
cout<<v<<",";
2 L5 ~% X8 b( p- Z } ( T. |# t( S6 Y4 ^" D1 h. R/ r
cout<<"\b}";
2 N4 Q' m" p8 X5 k }
2 C# g S: \) C7 Y& d else{
. ?# W* [: Q# A! U cout<<"{}";) b( V, O# C( [- z
}+ \6 f' j \) N- o! ^0 V( ~
}
" E1 m7 r: Y. i& l, f( X - y4 T: {7 G; U: ^
//容器vector中元素的去重! m' T e, U+ m) t& X. T, d3 w
vector<int> unique_element_in_vector(vector<int> v){ ~" r* L, V1 W- _9 B. Y7 D
vector<int>::iterator vector_iterator;
/ N8 l; ^9 |& U3 t* g sort(v.begin(),v.end());8 e+ @$ \( s& \4 C
vector_iterator = unique(v.begin(),v.end());
! R- C" A8 U' G) }( F1 e/ U) Y if(vector_iterator != v.end()){
/ N9 S0 v1 Z5 x v.erase(vector_iterator,v.end());3 t, O/ h/ r6 P
}5 p5 s& C) b1 {4 ~- N
return v;
- b$ _7 S' K1 {- T+ S}6 F1 Z; s2 _( w4 m. f2 X
" e8 h' {% K7 n$ }7 F) L
//两个vector求交集( \/ W4 V: }) c1 B, c$ F; n7 w
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
9 f" ^& K8 T7 p2 U vector<int> v;6 g2 N0 \' H1 T' L- [
sort(v1.begin(),v1.end());
5 \1 A; E% m; @* ^5 x( Z1 ^5 ?* c8 z sort(v2.begin(),v2.end()); $ C& n* W( r6 `- I* s+ q
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- c. ~0 y( M; D2 x# w return v;
! [4 t% e5 R) d- ?/ u2 w}
; v& I2 e* ^, J2 } @9 ~* u. i% j( o
: o. d9 Y3 p% U0 W, X% I//两个vector求并集
1 g( x ^# M3 D% jvector<int> vectors_set_union(vector<int> v1,vector<int> v2){8 ^$ J( c, c6 A2 I; i4 v" X
vector<int> v;
, y4 T6 o; U- u. h; Z! I6 h sort(v1.begin(),v1.end()); * U( I. B9 }4 U! M% [
sort(v2.begin(),v2.end());
7 D \2 u! O7 l- R1 J1 p set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
/ e- ?/ l3 s; _8 o/ n8 n return v;- ]. }1 s4 s# W/ b. P N) Y
}: R- ]3 |, M! \8 d! i
) z$ n. G+ M6 m//判断vector的某一元素是否存在
& r; n! D0 } o. o$ Q' z: Rbool is_element_in_vector(vector<int> v,int element){
" B+ \/ |4 h9 D5 W: W9 C# H- k- O- y vector<int>::iterator it;
4 F) c9 o. o- L, U# }4 P1 i it=find(v.begin(),v.end(),element);3 z) p+ S3 W; h# l2 ^, D
if (it!=v.end()){* z& A- d1 d# K: a4 q7 i! M% L/ X
return true;
; G: P, D* M) P5 c b- f }" y& A2 @: _6 j8 K& c+ R
else{
/ B/ D' s( Y" b, v return false;
; M4 Y. t% x' K j! W }
% D h f5 s$ E' {3 D' V& |}- y6 |+ Z" {' H7 N! L
+ l4 x! d/ ?; S0 y9 _- T0 oint main(){$ D, k3 v5 F" P8 i% C; T9 \1 |
vector<int> v1,v2,v;) v1 j! V; @& d2 ?' O) C( F
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
: H7 H8 P! w9 M" t cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- g; v# i1 l! i
cout<<"对v1去重:";
/ I: ]( x1 r" r) t v1=unique_element_in_vector(v1);
* d* Z% l7 n4 |# |/ S8 u. m print_vector(v1);5 \% T% B. Z5 E7 B
cout<<endl;
4 @! d$ D# w7 g2 ?& _! r cout<<"求v1与v2的交集:";
e" f3 H* l) { v=vectors_intersection(v1,v2);1 \7 i9 c4 W. m( ^ J( y
print_vector(v);5 K' E# K& }0 `
cout<<endl;+ K! _" n1 c/ v' v3 k3 I2 l/ g( |
cout<<"求v1与v2的并集:";0 I4 X+ x5 U. N0 p' p# a
v=vectors_set_union(v1,v2);
; F% u$ \! W. q/ Y print_vector(v);% X% ]5 H0 ~9 z. H# H- o: Z/ k
return 0;
4 C1 ~2 ]! C( ^4 v4 A1 @}[/mw_shl_code]
' A) m% p* y1 o. F7 p/ }$ L$ ] |
|