|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
; b, ~- U: @, I( `/ X. W
* n s, W/ C, M+ ^* QC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
- ?0 U* @6 h4 }$ ]% f[mw_shl_code=cpp,true]#include "iostream"
! [% j4 Q- |- [# V$ I#include "vector" % [: V) l) T. B, D! g( b7 N
#include "algorithm" //sort函数、交并补函数
6 M8 X* o) R( l8 G#include "iterator" //求交并补使用到的迭代器- u, {& N, w u0 n2 Q
using namespace std;, x, r" Z3 E% [5 t% [
" e# u" G0 F" M) b; G$ d
//打印容器vector+ E% X9 z3 u# l6 D" I8 K
void print_vector(vector<int> v){
# H6 J5 l8 i% Q if(v.size()>0){" ^2 R/ {/ p3 H2 s
cout<<"{";
" k' C6 Q; d2 b5 M; ?- S+ P5 J for(int i=0;i<int(v.size());i++){
- v+ r3 {' y& j2 _1 Z cout<<v<<",";
8 u& N u' Y: ~. Q; c } 1 L8 ^7 ^+ R+ L* M. f
cout<<"\b}"; ! A) V& |: o$ a! c5 B
}
8 \- g. y; T: X else{1 J6 _7 m7 ?6 ^+ G+ @2 G% v2 m
cout<<"{}";0 u! h h7 G6 W8 y; W
}
; ~0 U K" [* s: _) c) f} _! ~$ ~; p: l+ j8 m4 `( Z5 [0 i
2 f2 Z3 z* A; _* I4 D! ~//容器vector中元素的去重$ Y5 u- d# P6 o- U: O' C
vector<int> unique_element_in_vector(vector<int> v){
6 x& ^/ O4 r& B7 f, D3 R9 G1 I9 a vector<int>::iterator vector_iterator;: K* k o* p* M4 C! V
sort(v.begin(),v.end());
/ u9 q( a9 _( h3 ^/ `0 ?2 j5 N& y$ Q vector_iterator = unique(v.begin(),v.end()); I7 ?5 S( T4 q# B
if(vector_iterator != v.end()){
9 C8 q' R, t3 ]4 Y* B8 d0 L v.erase(vector_iterator,v.end());
% `: q7 c1 l* N3 o }, O. h }# @4 X5 e f1 ?
return v;9 K6 ~# c7 ]+ [. z2 ?
}
1 j+ a: _( N- |# s, H- l 0 Q4 ?8 a& }, P+ ?/ ~5 z, }; ^
//两个vector求交集
! k \( {8 d' q2 r1 ^vector<int> vectors_intersection(vector<int> v1,vector<int> v2){1 J6 I( E0 e8 \5 g- [9 f
vector<int> v;
. ^' G& P& ]/ o sort(v1.begin(),v1.end());
" w, L0 ?" {& M$ O sort(v2.begin(),v2.end());
* {/ w; C5 W/ s$ q$ d* ` set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
" @) X; |5 {1 G: Z return v;3 f" @ C8 h% J
}7 Q9 d: B/ D% U8 K j }% e
6 ^( k/ }+ ? I* p2 A$ e# |//两个vector求并集
& R/ O1 [' t4 \& F! d% w) W& gvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# V& x5 N" n5 B# _& x* u vector<int> v;- J6 u! w# }* w
sort(v1.begin(),v1.end()); 3 F, j& h- Y7 O* S" h# H& X: m; u
sort(v2.begin(),v2.end()); - g2 J" I' z2 W( |
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 8 u# F5 o+ T1 _* X6 j8 f9 K
return v;
2 ^/ s* e) a# u}& ~ w) X8 n: l1 R, V
+ m& {, y. L& F7 o( c) e//判断vector的某一元素是否存在
" W7 X& H ^8 H J1 zbool is_element_in_vector(vector<int> v,int element){# e. X% o4 |+ U0 M; y
vector<int>::iterator it;
1 p3 t+ m6 G K$ P it=find(v.begin(),v.end(),element);
% u9 n! s7 T+ K) E5 ? if (it!=v.end()){; m. N7 B% ^. [3 b& l
return true;# k7 Z, S1 m. ]' W5 U+ x O
}
9 u/ l* N/ u, W5 N2 Q else{
0 M5 X2 f. F% ~0 P$ Y: V4 b l; l( a return false;: t4 v. \# \3 n
}
- Y7 x% Z; J I0 k$ O; \0 o/ u}
, E$ e+ L( C% v' F, V0 n0 |
: w* }, |2 O! B! Xint main(){
& I' d& A5 L, j vector<int> v1,v2,v;) g# i0 R6 ~) b; p) m
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);! Y4 f: ^. N1 B* e ~1 ?
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
) }6 T6 ]6 I/ k; V1 i cout<<"对v1去重:";" x% h* ^" F$ D$ h. Y0 @$ c
v1=unique_element_in_vector(v1);
7 x: e3 a4 e) o$ v0 q% k( d print_vector(v1);
* f* d# z- V9 n& y" P) o/ S5 U% p5 ` cout<<endl;' `% ]0 ~' q5 s- L& F% k# D
cout<<"求v1与v2的交集:";) e& N' f& ~$ m7 J. Q" U4 B) [/ T
v=vectors_intersection(v1,v2);
5 Z' v* K" }# k5 p+ R/ Y print_vector(v);
3 `+ ~5 H! X4 d% e cout<<endl;
4 ?8 G+ n/ `* I: Q* m% l. x cout<<"求v1与v2的并集:";: H8 s! E$ o( w) I! ?; L
v=vectors_set_union(v1,v2);# ]& R' b# J; f4 s+ R; D% P. n7 |: }+ C
print_vector(v);/ R( |- \, N" M( v! u8 d& h/ _
return 0;) c8 S2 C% v5 l7 h
}[/mw_shl_code]0 K/ j3 F" W' P5 Y1 @9 Q6 D
|
|