|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
3 u, | |5 W; |( ^, o* {0 n
2 o3 D$ q: H# g8 ^ W* O7 I
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
% M/ }) ]% {% X[mw_shl_code=cpp,true]#include "iostream". t9 V: V; }' t
#include "vector" 9 ^ C" G; f% z6 Y% C
#include "algorithm" //sort函数、交并补函数% j- E/ S( e0 \7 L
#include "iterator" //求交并补使用到的迭代器- o# T- u7 Q5 _9 l
using namespace std;4 y+ h. U8 r+ K* V0 m
: D$ [: ]2 }, }7 {, y9 r
//打印容器vector4 s/ } O& k$ N& w$ X+ n. F
void print_vector(vector<int> v){1 S+ d b) k3 A! @% ~" P
if(v.size()>0){9 {4 }4 U) q6 z! z8 k( \( T! j
cout<<"{"; ' z- x0 q# `/ J
for(int i=0;i<int(v.size());i++){
9 L$ k5 t* P- e9 r; d% n5 y( A* U cout<<v<<","; ) O, V+ V8 Y8 l* `2 m# r
} 0 o5 Z/ |& t C, ` y: I4 U& ?
cout<<"\b}";
* L+ G- A7 w; B1 j! ^ }( D+ O/ `3 v& e! G6 c" f
else{
* L8 F3 v) x e( B7 \) D9 Q9 S cout<<"{}";% G& G9 i4 y, w9 K! e2 f2 J. p
}
6 ~$ z1 w4 \0 F; k, |' @( J}) g3 @7 v6 `) y4 Z4 c" b
$ d4 P8 L4 a- i; ?+ m' z" B m//容器vector中元素的去重& w4 w* x* B- U( |
vector<int> unique_element_in_vector(vector<int> v){# W/ ~: W6 w: r# q3 U$ t
vector<int>::iterator vector_iterator;$ ]) q) |4 }$ v) r
sort(v.begin(),v.end());( Z c6 q) Y. T: s6 R" |* B. S
vector_iterator = unique(v.begin(),v.end());" d' E) X s9 `! E/ E
if(vector_iterator != v.end()){
2 g2 V& N! V! m" V1 `: J) ^ v.erase(vector_iterator,v.end());
' w; f. p, q' ?/ B! h5 e0 R }
* |: O* v4 r- r) j# h; w: _ return v;
G; j9 |! w" W2 A, p5 I}7 B/ ]! P' F5 U- t
3 y/ j% P0 U$ N+ ^ Q5 y4 o
//两个vector求交集
8 P4 L! i! G- t9 A3 G( |vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
1 r( d' z# S1 B3 l6 v vector<int> v;, @3 W ]+ Q, z$ C, s2 P
sort(v1.begin(),v1.end()); * r' M! ^, o6 ]1 \$ [
sort(v2.begin(),v2.end()); 7 z2 `$ R' `1 J ~0 E) n
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 # b/ E1 ~1 z) T+ e( n9 i
return v;
/ R6 d* ^! J7 H}( n4 @6 Q5 e0 U- t
3 l5 e# S6 N- u* i, K) j! K
//两个vector求并集
, u: c- `. L' C& _* Wvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
; n" }- i6 K' N6 L vector<int> v;
' J- r2 y2 ^: w' v sort(v1.begin(),v1.end()); ' f# I8 ?% F- W' Y
sort(v2.begin(),v2.end());
& K: U# _4 m$ T( `3 i: G set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 y) z2 J6 C0 d4 q. s O
return v;
8 ]# z8 t6 r! q6 l}
. {) z+ D3 c2 x# H! m( i+ a9 p " e' M' I) i6 D. C* V" S
//判断vector的某一元素是否存在
9 q1 B9 Y, i$ Y; o2 ubool is_element_in_vector(vector<int> v,int element){
1 C A7 b2 \% O) [" [7 H8 A& @ vector<int>::iterator it;4 @5 a9 R1 i0 ]
it=find(v.begin(),v.end(),element);
4 }- D+ t8 U! u: l5 u4 `" c if (it!=v.end()){
( c9 ^1 M+ t3 T' U, J return true;" f+ _ `! y1 n, l5 X
}4 d0 @* w. {* p1 [+ m/ L7 h3 q
else{
0 i& k: b4 s$ R2 T; h6 @ return false;
. j& v4 {8 E8 y3 N$ d, f }
' }; \# S' a$ x}
3 l8 q# D2 A( ~$ f! d) D+ y& m
3 C; O3 ?3 x$ ?2 T9 U! @) B. xint main(){. k: j/ A6 {2 q: q
vector<int> v1,v2,v;
! ]3 c2 T0 R/ i. l v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);. x% g" R6 v0 e0 V5 D$ `6 t9 S, z
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
( W7 q; e8 b" e- S D cout<<"对v1去重:";
8 i/ j& B+ w* m' J& ?0 _ G! C6 y v1=unique_element_in_vector(v1); }9 X' e+ ^* `
print_vector(v1);# t3 c0 k9 O0 y, h; ]8 ?
cout<<endl;
" z2 A7 O" G. j/ _ cout<<"求v1与v2的交集:";
+ g k+ i! j( T* N0 F5 P6 ~& c' u v=vectors_intersection(v1,v2);
% h' i; \. Y% q5 U3 } S print_vector(v);
4 X/ Q" r* U# m' a cout<<endl;
# u; g: |7 a. A% V cout<<"求v1与v2的并集:";
5 \! `) y# P1 n8 D2 W v=vectors_set_union(v1,v2);1 i+ ~( s0 `. j W4 x
print_vector(v);* ^# O9 r1 b# D. Z" g& T
return 0;
! P% R0 v3 q' V1 c, _! r}[/mw_shl_code]
d' j1 [% V' H" h& k |
|