|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
# P3 j/ @% a) X5 x2 g* P, z# c+ }" W: |! |) P! |
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:% h$ I. C+ ~& ?) Z$ `9 S) {2 ~( T
[mw_shl_code=cpp,true]#include "iostream"1 j1 w+ f) T- u" ^. c* J3 `
#include "vector"
& z& `$ Q0 p& S% G# S#include "algorithm" //sort函数、交并补函数! T; u$ f" d4 K5 H: I8 F; d
#include "iterator" //求交并补使用到的迭代器
7 Q( w% @6 M3 r/ C8 }using namespace std;
- x) b2 A- Z1 d! ?
% H& P K5 n4 Y4 t0 d$ E//打印容器vector
: ^+ E- H+ W) j- Q7 g* Z rvoid print_vector(vector<int> v){! d8 M) S* p- I$ z A0 {( H; R
if(v.size()>0){2 E( z, r ]# h0 f+ C7 m
cout<<"{";
- z3 z0 B2 Z1 F+ G+ m. @7 { for(int i=0;i<int(v.size());i++){ 1 F1 s- o" f9 O/ m7 |7 W
cout<<v<<","; 9 k$ N1 G& _8 H- y. r$ c( [
}
& @( C1 S: c) a: {# Q% d* x cout<<"\b}";
; z9 D: {( T4 T' u( _% E }2 N$ M% h- h# r
else{
6 \/ W( s+ z3 [7 @1 i" _0 V cout<<"{}";
4 D b6 u5 G6 Q1 T }
, ?- w0 P }3 f8 W}$ N" }) H; F; }6 G: ` L
" @, I" k R$ J7 i2 X//容器vector中元素的去重) B/ K m# l4 Y, C! p' C
vector<int> unique_element_in_vector(vector<int> v){
% {2 w! Y$ v5 ]: d4 n! D vector<int>::iterator vector_iterator;$ c4 e& J7 ~0 N4 L) a( F5 Q
sort(v.begin(),v.end());
& `* t' L0 q( n& Y9 o vector_iterator = unique(v.begin(),v.end());
^4 |9 L3 K' ]. @4 J if(vector_iterator != v.end()){4 T9 g& i- C/ ? M0 B' ^) u+ ^
v.erase(vector_iterator,v.end());
; _, H2 N- k5 B& {- F }) K9 o% Z9 T% w+ t* A: W8 k% ^- U
return v;% Z5 u- E" I* g" t: B: g, |0 B
}
0 O' j" o, f+ _9 Q" C# S7 } 5 X+ j8 f' T; b2 x$ U5 j
//两个vector求交集. l0 H8 A. f" r
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){6 }6 a* p: G- f% ~( {
vector<int> v;' u/ ^5 a) `1 x4 z J& h# f
sort(v1.begin(),v1.end()); : l5 b# q( H/ C; _4 }
sort(v2.begin(),v2.end()); + @6 C# n7 C- h( F4 z9 O9 i
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
; T* D* c7 [" D/ I& P return v;
% [6 a1 o4 x! [0 M I& k: T" @}
& u" M/ r: V: {* j
3 F0 E8 H* D8 |6 e/ j//两个vector求并集
! k% V. N# ~9 tvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
' B4 x: a& h- H. O. B2 s vector<int> v;
% ?; j) n m2 s7 Z% o t+ X sort(v1.begin(),v1.end()); ! ^5 `# d3 ~; ?' x6 V `6 L! R. \
sort(v2.begin(),v2.end()); 1 x( _) b: m; Y4 i
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- E4 w5 C v2 s( b return v;
: r' m" j: h9 k/ v* V}
! D! r8 |1 g) r) ~0 A6 l( f
- H; O$ G" j) V% E" M& o% |: X, J# }//判断vector的某一元素是否存在
% |, u9 ~! S' t& Ebool is_element_in_vector(vector<int> v,int element){
3 Z% |" |1 w# R, Y8 W/ U. e vector<int>::iterator it;
% q! U, V+ @6 \1 K5 E$ k0 m it=find(v.begin(),v.end(),element);
& { x. F) K/ S: c* H if (it!=v.end()){2 ?+ x, u1 a1 Y
return true;1 V$ }* u/ f; ^2 H" @5 v
}
& G8 q9 P/ E% R$ x+ O else{5 I+ F4 U3 K5 Z
return false;
5 J* x7 v- m8 L7 m- Q }
3 j. m# j+ @7 x, G}$ f( }( J( p7 m& P7 Q" K: A1 ]
% j& L+ F5 i0 n- E, \int main(){! G6 ^" o5 k8 V/ `2 I/ I* L# f! M
vector<int> v1,v2,v;! D; G. e9 Z+ g& u a8 [
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
) u% X, S" z; h, h+ o1 D cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
! w% T9 |) c: B' ^2 N cout<<"对v1去重:";8 v5 s6 O" k) L) | J
v1=unique_element_in_vector(v1);
7 [7 ]1 A* ^6 X' T2 j5 P print_vector(v1);/ t9 D: h" H5 O& [2 S5 l, K
cout<<endl;
& S4 k* p* c" v- ]6 T cout<<"求v1与v2的交集:";6 P' o) {, U$ v! P, u- C
v=vectors_intersection(v1,v2);7 c) L8 Y1 H% s) j# ?! O$ u( V
print_vector(v);: | W6 I2 p6 M- w9 d
cout<<endl;
9 i0 v7 c @' d+ W4 o$ @ cout<<"求v1与v2的并集:";5 Z; U' X; S- ~( G: w; t
v=vectors_set_union(v1,v2); v) H3 }5 G. w* k9 C
print_vector(v);
2 \2 V- k: ?) }' S' _ return 0;9 q6 D5 L/ b, H, B+ _, A+ ~
}[/mw_shl_code]& x" O8 D6 j0 n: G
|
|