|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
# b" c. J& R. R- Z& Y. Q) W& L7 j) e' G+ Z: ?7 C) Y
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
; B$ h/ ^) a2 E$ {2 i( t9 n0 Y[mw_shl_code=cpp,true]#include "iostream"
5 O/ ~; ^. z( E8 K. G0 g#include "vector" 8 Y% |" ~0 p8 t0 |% P3 {
#include "algorithm" //sort函数、交并补函数
, Y7 A. h- a/ E @% e5 {; B#include "iterator" //求交并补使用到的迭代器2 w7 e/ l4 X P+ F+ M
using namespace std;" B4 E, |6 P7 }7 t5 Y/ W1 n
. X& W; N3 h4 u: K7 H; H6 L
//打印容器vector0 l) q ?- ?2 o
void print_vector(vector<int> v){* L5 J: y5 b' [# e$ ]/ b( G
if(v.size()>0){
& E4 J$ a/ m, u7 G- y9 U5 {: @ cout<<"{"; ) V5 R$ [( M$ q% a
for(int i=0;i<int(v.size());i++){ % t4 H. P! Z; W z. J9 m
cout<<v<<","; $ l5 U6 R ^- N* E, H: Z/ O9 ^
} ; c9 \# n3 b/ B) H* F; O
cout<<"\b}"; 9 ]$ t: F2 o3 Y# S2 O
}( C. j( n& F2 a/ A4 u3 U* w$ r- q
else{
: V; y7 k: Y, B/ x cout<<"{}";
3 `, R. ]- ?0 j# K }! F; I9 r5 g0 l) w5 r' c; l
}" u4 r: p/ Q5 M! t4 x/ g. i
$ J+ R0 D9 e+ W# \2 X2 M* e
//容器vector中元素的去重
: L, s5 _4 I. Tvector<int> unique_element_in_vector(vector<int> v){
* d9 |# |0 g4 \( }3 E% x vector<int>::iterator vector_iterator;
! H4 U( b' v) B: Q sort(v.begin(),v.end());
/ E: r: a( L5 ~, H5 h1 B3 ] vector_iterator = unique(v.begin(),v.end());$ j, U& a+ e$ Q% i0 n" k
if(vector_iterator != v.end()){
; v( y$ Q0 I; q1 G2 w v.erase(vector_iterator,v.end());* |, y+ H; F6 h( n. u1 X
}
1 ?" q5 o) c& D$ Y% |! p return v;
3 S) S. U( \! A/ ~$ b}
, g# z9 F1 v6 K/ N) H+ M/ _ 0 p' K# C. z$ s. o* k4 q
//两个vector求交集
! B R/ x) g( r! \& }+ z* Cvector<int> vectors_intersection(vector<int> v1,vector<int> v2){0 d; Q8 x/ {) X* d9 d4 m
vector<int> v;* V; M$ ^: x4 S. h: h
sort(v1.begin(),v1.end());
3 `/ s, o" g- @. ^ sort(v2.begin(),v2.end()); ! M& y1 F% V* ]
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 Q/ d, t% e; t& |% d/ j
return v;. j" P* J1 _' S4 r) i* i$ p. s
}# T7 i6 @. W) F; b& h1 i% ]
6 P: N- o+ ~( @; c p0 t& `" u" [
//两个vector求并集
+ M% O' M% f( l$ {" C" n+ bvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
. o" J8 a0 H1 m! p vector<int> v;5 o5 ^( ^% b. _& z: v1 A7 a
sort(v1.begin(),v1.end());
% g! v& Z* H) g sort(v2.begin(),v2.end()); 8 t [6 W3 S) ?, J. J
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 5 M% h7 Y4 Z, f' [8 H9 ?
return v;
& m6 ]! V) e5 c2 w}
2 A) V* X( E& ]$ ]. N1 n5 Q
7 X! W/ e) `! g//判断vector的某一元素是否存在
# ^: I9 R9 a2 t l7 wbool is_element_in_vector(vector<int> v,int element){
1 p$ t6 Z; {9 a: C. k- ?! v8 ` vector<int>::iterator it;
# Y0 x8 E+ r1 A- C& y: M it=find(v.begin(),v.end(),element);
' i9 g n7 S: y* m3 H) [' v if (it!=v.end()){+ F @2 V$ e, ^/ f1 L9 [) O
return true;+ F$ P7 F* n9 r8 A) U' _
}
% C1 J, @3 H+ ~8 X/ l5 e else{
3 B4 a8 X: P: t& z& \1 T return false;$ Z; o7 l9 v9 _
}
( q' W& Q& Z9 X, s" c1 {}+ e7 f5 G( E- H% q9 X h! M
( r1 h, t7 @8 i7 S
int main(){
* S# e( M! h% K vector<int> v1,v2,v;
/ V+ |3 S8 J- \1 r( t v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
) M. v9 S+ s- L# U: I cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;, H; W3 ]( I4 Q8 G3 B4 q( _3 q+ _
cout<<"对v1去重:";% `! Z* b) ^5 Z0 I" ^1 Z
v1=unique_element_in_vector(v1);" d) S/ l, U7 e, B
print_vector(v1);: v; I8 m! `+ D6 `
cout<<endl;. `8 o% B2 N$ {
cout<<"求v1与v2的交集:";( ~. n" X# r. Y
v=vectors_intersection(v1,v2);- z r4 T+ G5 ^6 O5 c# b4 Q8 h
print_vector(v);1 b" c7 I2 m. f. S
cout<<endl;1 m4 `, C, [$ p% X8 K- d1 x
cout<<"求v1与v2的并集:";" \' z% }" ?8 f' d2 a1 N
v=vectors_set_union(v1,v2);; P" S7 x. X' U+ h4 i. M
print_vector(v);+ c7 n) I* l+ B0 q6 s% i V
return 0;/ Z2 Q/ L9 S# _2 y& d+ B, L
}[/mw_shl_code]5 h7 Y/ @& d2 y% Y% m9 d, Q9 B, D/ d& G
|
|