|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
' \; Q) k1 L* w3 E( f. w! S% f# }3 Q
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:- \! I1 d" ]/ I2 x; ?
[mw_shl_code=cpp,true]#include "iostream"
7 X0 ?: \3 r+ ^$ Z4 ~#include "vector" 6 s1 D* H) ]8 o1 k0 k
#include "algorithm" //sort函数、交并补函数; J2 p2 `. r0 s' S( k& K
#include "iterator" //求交并补使用到的迭代器
6 L) }$ Q0 W' X8 A4 K/ D. i$ Dusing namespace std;8 [, U" N) ~7 c8 k1 x
$ D3 q; C) _: p- u1 ~" u( c
//打印容器vector
8 O) E& d5 i1 e W$ _" qvoid print_vector(vector<int> v){
8 U7 |' |" `- r+ d* | if(v.size()>0){
+ g" }3 s1 b) E2 _1 u' W# W0 Y cout<<"{"; + `- Z$ G/ R9 v' t
for(int i=0;i<int(v.size());i++){
4 B: _# y/ T5 T& O( K& ]% r cout<<v<<","; 8 Q4 z1 v9 l& v* ~( V
} ! h* E( l5 b2 h+ X( k! M
cout<<"\b}";
: q( p" W: w. b5 o( a$ c2 v: ` }
# u+ n+ n& H# l7 Q4 s1 N else{% H) S6 Q R j6 w% O T6 ?; X9 p
cout<<"{}";, G9 u' J6 j- S# H7 R
}
) H4 m( _4 l [}
9 A& Z# R9 \6 u; v- K# K7 `8 O
% o. S! U7 N" ~; ]% D//容器vector中元素的去重8 W/ e" I8 K6 y2 Z
vector<int> unique_element_in_vector(vector<int> v){
, ]6 C& J+ V5 ] vector<int>::iterator vector_iterator;9 L$ i+ V: L; a/ ~6 o6 h
sort(v.begin(),v.end());; f1 k0 {1 b( ?, `% R1 }( Y. G
vector_iterator = unique(v.begin(),v.end());
/ s/ D" F/ P7 A* Q" P if(vector_iterator != v.end()){
) j7 Z3 }/ H/ l3 Z v.erase(vector_iterator,v.end());
; X/ r1 P7 I+ x+ C3 @4 I }7 k0 M/ n P6 b, X; R; i. I
return v;
/ g' r# Y; Q2 e! D, W}
- J9 o( s: r$ t7 _' L
x* P6 B! V6 e7 J& ]//两个vector求交集 X l& E+ b( _1 G
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){" I8 q; ^! X2 R J h
vector<int> v; Y: J& Q2 `' D2 i4 u* t
sort(v1.begin(),v1.end());
0 u, G; w$ T/ `/ r sort(v2.begin(),v2.end());
, ^& ]/ M% J, l; N2 @ set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
( D! g4 ?3 I! v: A) _ return v;
: m$ u5 ]+ t, q# \+ a" P2 B}" G. i5 z5 `' s
3 A H8 L q$ w//两个vector求并集' b, i' e/ a; c: W# j5 V
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
- x% Q1 C: R; h; O$ p0 |7 r vector<int> v;
) a& M) K! J0 G) ~8 Q# k; J! f( o sort(v1.begin(),v1.end()); ) ~2 r2 m: r& P* k1 K
sort(v2.begin(),v2.end()); 6 x, A4 M9 R; ~ u& Y4 A3 l
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 " \+ I3 u( A% O4 Y$ { ?
return v;
' } P: S6 `) P) ?3 u8 @}
/ c4 v8 y$ |* ?" j; q
) j3 T/ S" `8 }7 f& s2 Q//判断vector的某一元素是否存在
" L6 H$ S# a. {' u# wbool is_element_in_vector(vector<int> v,int element){- j& m0 z- }" |* C( @
vector<int>::iterator it;) D; G; g9 z- U8 j
it=find(v.begin(),v.end(),element);
$ N" [ R2 l! x5 A6 {6 v& a, ? if (it!=v.end()){) Q E. @; T, k$ n! Q
return true;* w3 v! P" c# y2 L
}
6 I% ?* x) L% L0 H% U' s else{2 R: x3 Z7 j% f0 O) Q
return false;
0 [: q- f' `0 _+ P! K* K }
8 A. K! d$ {! O, a" M}
. U5 f, H+ }) _+ C! `# d, v" N ! A! m* ?$ m) W% m
int main(){
) v4 l3 J+ k6 \; H vector<int> v1,v2,v;# y6 g+ G) w* A6 ?
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);, c; I+ o/ _2 T" H' v- {: h
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
8 v, a, _ I: ^0 T- n% K cout<<"对v1去重:";# |6 O, Z. W1 I' ?
v1=unique_element_in_vector(v1);& v* H+ N* C- n8 V/ g m7 j9 a
print_vector(v1);6 y, }+ d. Y9 U3 A7 D+ M* g
cout<<endl;
2 R. N# f. ]7 q) G cout<<"求v1与v2的交集:";
6 ]* Z0 [6 E U. Z v=vectors_intersection(v1,v2);- j# Z/ ?: Y5 D, `/ p* j) _2 a
print_vector(v);/ @& M2 A4 p- l
cout<<endl;
# k6 P+ w3 d+ f) L/ n0 z" ~( x/ c cout<<"求v1与v2的并集:";
3 {9 }0 g d; G/ T7 i' {9 J, J v=vectors_set_union(v1,v2);( G& C4 I, B# C* r+ E. [
print_vector(v);% }1 e9 N* r" F( X& k W+ ~4 v8 I
return 0;
* H9 i& l/ c( E0 ^1 \}[/mw_shl_code]6 {1 a0 Q8 L- z F& b/ H
|
|