|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
- d, W9 z* v. Q% x9 f
f# N" h3 C- `$ Q. n% D% ]$ q
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
6 H7 e- w) T' q9 W J5 w[mw_shl_code=cpp,true]#include "iostream"1 o4 s; F8 I+ _$ p; d; W
#include "vector" + v8 |( }9 C3 f: `$ i
#include "algorithm" //sort函数、交并补函数( i2 Y- u- g ?* i
#include "iterator" //求交并补使用到的迭代器
; U3 A+ d) ]: xusing namespace std;3 ~0 W S4 ^. W W u
: J- _) w ~. i5 P- e1 _ D//打印容器vector2 h" Z) u# H2 d1 f+ d1 W
void print_vector(vector<int> v){8 |( L( _( ]: p9 a& H C
if(v.size()>0){. ~4 X+ ]5 m& [2 j
cout<<"{";
, k, A! e% }' f0 ?$ |5 J! w. H( B for(int i=0;i<int(v.size());i++){ 7 R2 _6 D/ l/ S" C/ {+ {, b3 i
cout<<v<<","; `! B7 M+ }, v* ?5 r
} [" I) {* {# M' V; a; z
cout<<"\b}";
( _8 u/ E0 |$ C! x }( D& y v2 e0 {* ?% ^) g7 I( l
else{
2 s9 x( g4 y* a" u m, T2 H. X cout<<"{}";# o+ v% k w4 N# N1 Q- X( e5 \
}# h6 @* P( ~/ w; k2 a; a. i
}: U9 r/ f1 ^/ T+ ~! q) M7 ^1 f" w8 e- J
: @8 K5 m K- o7 ?5 G4 m//容器vector中元素的去重" U& F1 A5 Q% c% r4 F" `7 x
vector<int> unique_element_in_vector(vector<int> v){3 z& |! T# e, Q) T) N
vector<int>::iterator vector_iterator;5 ]* p) Z3 ^9 q, g8 l7 U& w$ T
sort(v.begin(),v.end());) A: N. c: J+ Z# x+ e. i% p- {
vector_iterator = unique(v.begin(),v.end());2 K0 R, r7 {. L
if(vector_iterator != v.end()){
% x7 Y$ W# O/ ]( r* R/ [. b, } v.erase(vector_iterator,v.end());* ^, ~0 ~" y d0 J* {
}
% Z; x6 z% ]; x- G3 }0 |+ O% F! ? return v;
3 U- u6 z6 N& L, H G% P}& I4 B2 ?4 M/ S, B8 _8 A
* p s9 p' M. x//两个vector求交集
3 B. P! C0 E$ S8 }vector<int> vectors_intersection(vector<int> v1,vector<int> v2){+ n5 a) j2 p- N9 G
vector<int> v;
( S5 ^$ [9 c. u& f' B sort(v1.begin(),v1.end());
8 G1 F. `( Q U( o; d0 L7 j sort(v2.begin(),v2.end()); 9 ], ]3 {: s6 m7 t, b
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
* s q V1 W% C& h% b6 K0 o% ~! w return v;0 z' B4 n- Y* e3 W
}0 I$ d; h# t8 i0 ]
* \; S4 C$ L9 }' Y2 d' j# C' L
//两个vector求并集6 E) c0 O. A0 K. b# J7 A* Z
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){; I( S) |# h$ x# X/ b, n; {
vector<int> v;
P) l( ~) Y9 J+ x. f0 \- N sort(v1.begin(),v1.end()); # h: `2 s# c6 }
sort(v2.begin(),v2.end()); 4 i1 V) g' d1 l
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ u; N& f, k C' H H
return v;
+ w; ?5 s6 a/ ~9 ? u3 @$ r}" [9 t3 ]5 I8 p, z2 B
4 x% ~/ i) c" K; Y; B: D//判断vector的某一元素是否存在
* U9 h- @5 K# B. B& U$ \6 K# ybool is_element_in_vector(vector<int> v,int element){
/ _9 F( g# S& F vector<int>::iterator it;
" S' g* [" y5 |( J6 L it=find(v.begin(),v.end(),element);( ~! ?' h+ s$ W9 W8 |+ ]
if (it!=v.end()){8 P9 q. K4 W8 n; r+ _
return true;
N- u5 L' I6 O2 [8 W5 } }3 g4 T+ G" S3 J3 d. w2 \. B
else{ E" n# h, ~, O8 Q" u3 n- w2 H7 J9 @
return false;* ]! y( y: U9 G* \/ }8 [! M7 t
}. _) H, D. Z$ T/ @: t& [9 c
}: ^( O" ~6 Z2 |* L
?" i' b8 q& F' W: ^: V2 \
int main(){, |4 s7 k. j% m# ~6 i- n1 H
vector<int> v1,v2,v;
' Q! q1 U* g$ g v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);2 h! H& K& p; X2 z2 S7 v! o9 r4 ~
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;% }4 `: V0 S" l# E
cout<<"对v1去重:";
: [" g3 [- ]# i/ I v1=unique_element_in_vector(v1);1 T* r( o3 a4 \$ x! L% M
print_vector(v1);& D$ ]& x! j& `
cout<<endl;- `! l# t: ^5 I0 d' W6 I1 _; p0 b
cout<<"求v1与v2的交集:";& l p+ I6 ~' T# i6 F. F
v=vectors_intersection(v1,v2);
1 D& Z# s% Q; m# x; _ C print_vector(v);
L6 A3 u7 f* n" d5 _9 F2 S cout<<endl;
5 y- b2 ~' x4 J. k cout<<"求v1与v2的并集:";
0 H+ N! e ^1 Y+ k* j0 i" N, w' H v=vectors_set_union(v1,v2);
4 X0 L" _: P+ R print_vector(v);3 a# i. L& N( ~5 x# H4 }2 o4 ~9 j
return 0;
& U e& Q& P- w/ u7 a}[/mw_shl_code]1 G* q- x, b/ |9 W3 F" |5 R
|
|