|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 H8 v- {, `4 c" ]
$ M" @! ^; s! x( R2 O3 {
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
7 N. s1 ]( {1 ]8 `( Q! K2 F+ k( c1 V[mw_shl_code=cpp,true]#include "iostream"
7 A& B h* l0 o! R2 z. a. j9 w1 U& s#include "vector" + U. \; X" o- x$ r
#include "algorithm" //sort函数、交并补函数
% R8 k2 i) s$ u* E#include "iterator" //求交并补使用到的迭代器
9 m$ Z+ g" l9 Y2 Zusing namespace std;) X9 E3 ?" {/ i. ]
6 ]( f5 T3 I& J% S) h5 K//打印容器vector: i* w6 K) n: O! j9 o, G2 d: y
void print_vector(vector<int> v){" Q( e: I3 P, R9 c T( F! t
if(v.size()>0){5 }3 G/ r8 K- t1 \* r9 t) P! l) G
cout<<"{"; 4 B) C' Y9 j n" k, c& |; {
for(int i=0;i<int(v.size());i++){ : l8 F9 P: B, l5 Q8 a
cout<<v<<",";
' N U% u: m. z- n' T }
; g. N; `( Z+ S% W" P, M) [) Y$ b cout<<"\b}"; : B9 g U) O) L5 X' M: w$ S7 A
}
0 u0 _ d7 Z: N7 a6 a+ } else{
: ]4 y. X- J& e% z5 e9 A+ t9 D5 ? cout<<"{}";2 n& s4 s% ^: }. R9 M( l
}5 T0 N2 X& b/ p# @, z5 B+ W
}
: _+ y7 @( i* q; ^3 \
, K5 D* i% H) {; ]; F; w. `//容器vector中元素的去重7 Y/ ^3 x! ?6 X: v. [# G0 l
vector<int> unique_element_in_vector(vector<int> v){
- O1 i& P+ N2 l% I1 |& C3 N5 G) @+ ^' a vector<int>::iterator vector_iterator;5 g4 g- a E: p7 I8 z/ o/ s" }
sort(v.begin(),v.end());) k' X7 J J) B m/ O2 }
vector_iterator = unique(v.begin(),v.end());+ `! p/ S* Y3 b/ i' K7 a
if(vector_iterator != v.end()){6 d0 x; E" s% |! o P: N
v.erase(vector_iterator,v.end());# K$ C/ h I5 v4 B4 {4 a- V
}% s0 E6 _3 A# C z, K! F/ u+ ?* m, a- D
return v;
3 [ J0 J& K( A; J1 j}% z" l7 F: _* L
7 L J/ P8 A+ r' ~0 J+ F. ~
//两个vector求交集
0 Q7 Z& p- O" N% Vvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
* M s% J+ I! e" i' P. M vector<int> v;
; R0 H/ y, s( y/ ` sort(v1.begin(),v1.end());
0 S1 b& ^3 g& s5 m, } sort(v2.begin(),v2.end());
8 l' V0 Y* B- p. H5 A% K8 n/ t set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 e. T* i5 F: ^# D" v1 z/ `
return v;8 \0 C1 w. A, S0 j* t6 }4 {
}
5 t0 }0 Y2 G8 D. R- y# \+ _ x3 P6 [
7 E* P& o2 w, Y; D/ S6 K, N4 H/ [9 C//两个vector求并集
0 O1 w7 |) m! X* W! rvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# L; N$ d. m3 S6 K) @# x* d% A vector<int> v;
; i. k- m, i3 L sort(v1.begin(),v1.end()); . y* H2 [( J- |) F A! M0 _) M
sort(v2.begin(),v2.end());
$ W5 h A( k) c! \- L( }! M set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
& j# P3 Y6 w9 @' x5 T7 F return v;
9 N$ R$ H, A0 X9 b2 P4 r1 v' P}. f# l1 a( T! K7 k
9 R7 a6 r7 v0 h$ g//判断vector的某一元素是否存在 O' T4 f, E) f6 j
bool is_element_in_vector(vector<int> v,int element){
' _, N* C; f4 m: n vector<int>::iterator it;7 e0 Q P1 X" N. X1 @
it=find(v.begin(),v.end(),element);
- J9 x4 p; h. q1 b {+ X: [+ P if (it!=v.end()){
* D' ]/ h9 R4 I e$ @ return true;
0 B$ `' m0 _; m8 k' w }
2 x/ H# t/ C8 J7 m3 D else{& h8 S- ?, H, c9 p# {, V4 F; V0 l7 {
return false;
! P; {4 ]9 H$ E) i7 x" Q! B }
# a) ?* I% i3 G) ?. p& v% Q}
, }6 h C1 h+ J. z" W8 p9 M
8 e/ L+ e% S0 x I. v+ Pint main(){$ ?- O$ A" M- m& e8 a
vector<int> v1,v2,v;# W! a w1 t2 S( L
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
2 E( @/ S2 T0 ?" L) A% E5 C) h cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
/ ~2 K# y8 G6 E5 f7 X cout<<"对v1去重:";
: t( s4 w* Z. e$ M0 D: } v1=unique_element_in_vector(v1);
4 y5 J8 R! U4 m/ y f+ G print_vector(v1);
6 g5 U* {0 l% i$ t cout<<endl;
3 E. x1 O* K- O% Z7 H/ r cout<<"求v1与v2的交集:";
9 {5 q7 V/ {- ~' L0 s. ]. \: H v=vectors_intersection(v1,v2);
6 S C. ~; c8 Q: t" h print_vector(v);
6 x$ v6 D# Y3 k5 U( U cout<<endl;
( l% |$ ]# a: x" m* {$ ]/ E( T cout<<"求v1与v2的并集:";. k, W) P# Y# @6 w& W
v=vectors_set_union(v1,v2);
# T6 ]9 R; Q% H! R' r: Z" b print_vector(v);2 |# ?4 d) {+ a% A* f
return 0;% ?" G4 v/ R! J( h( U0 R
}[/mw_shl_code]
: A; |+ J8 ]+ t* S M" A |
|