|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) L1 m+ E6 n) R
& N- M: y {5 w6 T" I! h1 gC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
4 J4 u( i4 X# I+ Q9 s8 e[mw_shl_code=cpp,true]#include "iostream"( \, i5 b! R; X- ?
#include "vector"
^1 D& i" o9 P% w \* R1 C! k#include "algorithm" //sort函数、交并补函数
+ v$ R4 m/ W* o ]& m" y! y; r/ P% `#include "iterator" //求交并补使用到的迭代器
% M' j4 r8 ?( r( O/ h* eusing namespace std;
2 N* {2 k) l7 E7 Q- ?
# Q! j3 _* N5 s' B& @% p- S//打印容器vector
# k4 N$ K3 A. K9 rvoid print_vector(vector<int> v){
) }* ^# L; _9 a# R if(v.size()>0){0 p# B4 V! B) k1 L* o% P3 {
cout<<"{"; $ P' R2 v0 `) \9 M3 P
for(int i=0;i<int(v.size());i++){ ) N! @) y) K6 ^ X. Z3 E
cout<<v<<",";
2 Y8 Y7 l t% k } 3 b) G/ E" o1 n% E) C
cout<<"\b}";
- C) g v2 O! j/ i- r" ^! k) v) I }
7 t6 a S3 V9 w else{7 W' Z$ o- Y# y
cout<<"{}";% d; X- }* A9 o9 l7 }4 t$ d8 r
}6 }& |% F3 p; \# I$ y1 Y8 D
}
$ R* b8 F) z: w4 d5 L9 x4 A( |/ j
. K6 T( y$ z3 K5 A" x9 M//容器vector中元素的去重
% O% N. j$ N: ?, W1 ]& |vector<int> unique_element_in_vector(vector<int> v){) Z2 E9 o5 O) G5 s! N/ i9 X
vector<int>::iterator vector_iterator;
9 ^% l$ @. p; s5 M- b2 L3 G) U sort(v.begin(),v.end());
1 F1 e; @5 T ? vector_iterator = unique(v.begin(),v.end());+ f/ f i4 g# |' B9 p2 [& G) a3 \0 f
if(vector_iterator != v.end()){
# I/ X9 N* e3 H c4 C v.erase(vector_iterator,v.end());
: X/ v; `$ H' u" i2 E }
: e9 k% r/ F2 R* B7 I2 C+ v& D+ Z return v;
# N5 [( n j+ ~$ w4 k}- J1 `( S$ a& m: z# j
. J! [1 I0 N- b2 d$ ?* Y+ _/ \8 S c
//两个vector求交集
2 E% _8 }, i$ k0 y# Hvector<int> vectors_intersection(vector<int> v1,vector<int> v2){) B. |( v; ^$ h- x9 B$ q8 f
vector<int> v;
' Z1 ^6 O+ `/ g; G9 H. _! n7 {: e5 f sort(v1.begin(),v1.end());
4 Z2 A" h C9 U- [: G: h sort(v2.begin(),v2.end()); * I$ Z5 u. u0 w$ D2 Y: h8 \- {4 K( i/ b- N
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- T* v& ~4 B2 i% V, t return v;
8 z- o, L4 v2 m4 t1 f) p6 w! m( T. Z}
2 M( k) g: Y* O+ _ . M+ w, Q! l. b9 v
//两个vector求并集8 k2 S6 h! O! x! s& i
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# ?! G; v9 C+ n$ I# [, j vector<int> v;2 f( z; O, E3 Z+ w
sort(v1.begin(),v1.end()); 6 h) g, S+ w9 D$ R- S) g! d
sort(v2.begin(),v2.end()); 4 O( u( E" j# ^; B0 Y9 k" _
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
5 c; {8 _: Y" O" M! T [! v1 n return v;
9 ^2 P: `+ O: B. H}
/ L5 x& n8 ^0 c
2 I, F. K; _4 j5 n0 C1 Q1 O//判断vector的某一元素是否存在 v% j# }* }5 T" ^
bool is_element_in_vector(vector<int> v,int element){; U6 [# J+ L; R9 O. g; s- Q' z9 P
vector<int>::iterator it;
+ Y( v6 n* I: J) |4 Q) Q it=find(v.begin(),v.end(),element);
& v! \9 f# i6 G0 B- V0 Q. X, ?0 H0 E" n if (it!=v.end()){
& n* L! T9 y! W- `) S return true;6 F& \, C1 J3 X! Z/ G. F4 q W
}
! k- s( P% b8 G) n1 J+ I else{9 R6 c0 X5 @. `+ ]6 u6 F% Y5 n
return false;
( ]8 q1 L. g( }( o+ {) ^1 L; E }
5 a2 O9 x( o+ i% U}
3 Q. _0 K+ [# [$ d. M2 X" S
" G) k9 I# j/ O8 zint main(){& @, g- i0 K" h* a; H
vector<int> v1,v2,v;$ T2 v% A e% i0 V
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
2 q0 e8 s6 l7 d/ P: P0 O cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
* [% h6 ~0 S# G: t$ l' Q4 A# o cout<<"对v1去重:";0 h, k8 p3 ?# O, G4 i* A
v1=unique_element_in_vector(v1);
/ P* |# O' @) [! v: U print_vector(v1);
4 M C7 @4 \; {# o3 ~ cout<<endl;
7 B! L5 a* r+ {/ V: H+ X cout<<"求v1与v2的交集:";) A$ F) _) Y. A, U/ E" Q* B
v=vectors_intersection(v1,v2);% _2 q/ k- ^- n0 i1 I( }; G
print_vector(v);' \5 W4 S/ h0 v3 ~+ a% J
cout<<endl;! c5 Q' n/ [$ I. `: _
cout<<"求v1与v2的并集:";% a: v9 E% T7 h- J f8 P$ o
v=vectors_set_union(v1,v2);/ w+ s) e: y' x
print_vector(v);
5 { e( R: K) B% o& I% p, B return 0;
: N z5 @% |7 a& v! a7 `/ {# J! a; _}[/mw_shl_code]% W) q: _! B+ V o
|
|