|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
1 k1 Y5 O& T4 ]7 K: g5 A
; F9 h; p% I% E( mC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
0 D- v0 q+ m' P X" x `. b. c[mw_shl_code=cpp,true]#include "iostream"
# Y# W# f* @4 z+ M" h$ D#include "vector" 0 T1 j9 e. ~+ ?; f1 U% {, P% D
#include "algorithm" //sort函数、交并补函数
& i: p6 i: z: E1 B1 b+ c1 f8 q#include "iterator" //求交并补使用到的迭代器
$ U+ ^3 ^( u musing namespace std;
: i! M! k( s' p
. k" R- a/ ^: @//打印容器vector6 U1 | \8 a) B0 M! P
void print_vector(vector<int> v){7 o6 G2 Q: N' H F( ~. u0 s
if(v.size()>0){5 \1 q4 {2 ~" _
cout<<"{";
6 P1 o/ ~" n# R( j3 H; u% q for(int i=0;i<int(v.size());i++){ ( X) l1 B, G4 F( K6 ~% U
cout<<v<<",";
& X0 G6 q; r9 Z } 7 A Q7 b- C" `- I) q( r$ d; x: W
cout<<"\b}"; ' [& q* E, y3 L' {4 U, H) O
}- m, s8 \* O# c: O$ l
else{
, T4 m1 @2 f% W& V$ O: O cout<<"{}";% B: Z+ s# T% i, z7 Z5 j$ d+ o
}
# X' k+ H/ w1 W1 c}% `6 o# v1 t1 M% f
4 Y1 N0 e: A0 ~
//容器vector中元素的去重 Y- ~; J5 Q+ B, r# h0 ?& n
vector<int> unique_element_in_vector(vector<int> v){
2 L+ n z. U; D. N$ r$ D! o' o vector<int>::iterator vector_iterator; |# m/ e5 u& o4 @
sort(v.begin(),v.end());9 [( j8 `9 ^! @$ {, _, S7 b
vector_iterator = unique(v.begin(),v.end());4 W$ ^& x. s) k5 c; x
if(vector_iterator != v.end()){1 O' z3 e- m Q! S" n' |1 z9 A
v.erase(vector_iterator,v.end());) N0 v' u4 s$ h2 D8 U- q
}6 a/ G" M* k! k) c1 ]0 M, U
return v;2 A& A/ T9 M/ P& Q& F
}$ Z! S! L# z: F. T% V' c
2 E R$ {# K' B Z |
//两个vector求交集
0 {4 q/ |" C1 j; \0 a- pvector<int> vectors_intersection(vector<int> v1,vector<int> v2){2 S4 q# R# b! b' Z
vector<int> v;
- X) h: X) ]9 p. |) N- o sort(v1.begin(),v1.end());
! j/ [6 e5 m. w: ?. j sort(v2.begin(),v2.end()); 2 T1 }. a/ y* @) @# N
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 # [3 A% T) Y3 I% W1 n1 c
return v;
. `2 S9 a+ H* q8 h0 O9 V}
& N5 V6 Y2 F- b3 ]" \" g6 E. r! Q+ x 2 W6 y8 s) E7 \4 j$ u7 ]
//两个vector求并集4 a% M# b. D' i1 `, B" z6 {
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
5 ]& I) x; y7 f) \- _" S$ \ vector<int> v;+ p& j8 h5 u* c% Q! [
sort(v1.begin(),v1.end());
{8 W* v1 }+ U0 R sort(v2.begin(),v2.end());
, D3 Y. H( V/ h/ M( [) R2 G- I) G" p set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 2 ]" { _- c" D' }- Y, L$ s2 y/ G
return v;- e# X% q" w9 \
}) T! K# |( w' a# |9 o
S) V( m% D2 ~& i1 y3 K/ q: j
//判断vector的某一元素是否存在; h- n$ ?1 T7 Q- l0 N
bool is_element_in_vector(vector<int> v,int element){+ q( w$ a: H: f$ M
vector<int>::iterator it;/ ~+ Q+ P1 Z) r8 e
it=find(v.begin(),v.end(),element);' {0 ~# i; b, W/ E5 D1 L) B
if (it!=v.end()){9 Y- N9 w# m9 S- [/ _
return true;( g/ L: c/ |* ^8 n1 J/ Y
} T' X1 m! S% [5 X& `) g
else{) S! J; ]9 l _4 j
return false;9 L3 x7 g/ _1 U( Z* a" T
}
1 \) @3 M7 r; y# M8 Z6 \9 R}
. m* Q: d8 e# t* v/ @ * p$ c, t0 N8 I
int main(){
( R! t6 g# ]( n! z, B vector<int> v1,v2,v;# I3 T' q" C6 T! |4 Y
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
3 x; N* y; {9 D) S; P, A cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
# A) j3 I {4 ? cout<<"对v1去重:";5 h( v2 S" F/ B; w
v1=unique_element_in_vector(v1);1 J; \5 C1 F3 s+ V' Q1 Y
print_vector(v1);
8 r& V& E, W* d. N7 P cout<<endl;9 F6 e# o! v" Q# W( G$ j* y, \
cout<<"求v1与v2的交集:";- _1 r- ~/ ^$ h% s$ a/ X. m
v=vectors_intersection(v1,v2);
- z( F( Y" e# o- r. H print_vector(v);7 d/ ?/ T* J9 X( C' b7 W5 l
cout<<endl;) f" I. J8 [8 @
cout<<"求v1与v2的并集:";9 q6 t/ L/ m2 W; `
v=vectors_set_union(v1,v2);$ ?* F% N7 T* X* i( b( m$ d
print_vector(v);
4 e5 P+ A$ H5 H; c$ @7 N0 e$ { return 0;
/ G' I6 x4 M* [}[/mw_shl_code]
# t3 J+ o. C2 R _+ P' n |
|