|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% k" ~) o& [; T
6 N2 W8 ]& [7 R4 n( N+ vC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:2 V, B/ w( r" G$ ?# @- S
[mw_shl_code=cpp,true]#include "iostream"
* ^7 _, o& q G6 r3 F5 J" H#include "vector"
4 \/ u* ~1 P3 u#include "algorithm" //sort函数、交并补函数
+ t- I6 W; H+ _+ N7 ~#include "iterator" //求交并补使用到的迭代器
J( r# r6 o+ I3 F0 xusing namespace std;
) Q" h8 t, W: `4 M; ]& |" K * c% t: K# T1 U- c5 O: r0 P$ o
//打印容器vector) O* O/ g9 Y0 y- Z. b D
void print_vector(vector<int> v){/ e: U' Z2 O# E+ Y6 t* R
if(v.size()>0){
' o2 ~3 L2 B: R- u8 S cout<<"{";
3 b6 B; G! g4 d: J3 M9 ` for(int i=0;i<int(v.size());i++){
% i; ~' g! T. k. q. ?* j: \ cout<<v<<",";
B2 S6 p5 \/ r( a- h, w- C }
/ Q5 n: [3 i3 P* \ cout<<"\b}"; 3 {4 n) P8 t: `! Y
}2 J+ S6 o, j5 T' v5 i0 P+ H* X
else{4 Z& [" |8 k* H9 b' F s% B* z' z
cout<<"{}";
/ ?+ X" n. Z* a3 m. K }
& V: @4 Y' L& U/ U h! x4 W% I+ W( }}7 q1 ?0 q6 k+ K9 ?1 J
% R, E8 q$ D$ {- {* d; T- w6 w" b, |! g//容器vector中元素的去重! R: A: g% {/ |" Y2 _/ C4 s; N
vector<int> unique_element_in_vector(vector<int> v){4 \! [9 e; E% _3 \
vector<int>::iterator vector_iterator;
5 d2 U( j2 Q/ Z6 z& ]; }. I5 B, ? sort(v.begin(),v.end());" k/ t1 |8 x0 `6 Q
vector_iterator = unique(v.begin(),v.end());
$ Z+ _" c, D0 x& r* F c if(vector_iterator != v.end()){
7 ]/ B/ P h/ W. y v.erase(vector_iterator,v.end());
: E L) e# l/ t, `1 i }, D/ q: v H/ W) Z
return v;. S7 g" t; D' K+ D
}6 J: V5 z5 g( a. X6 Z
( }4 x: c6 B0 d" m% w
//两个vector求交集
+ E, Z3 ?9 N+ ~0 e1 lvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
- O9 }9 E+ c+ k2 c: Z vector<int> v;
- n, P. _ f& d+ I& }5 z } sort(v1.begin(),v1.end()); * N A. i2 ]. [' |# q- R. ]
sort(v2.begin(),v2.end()); 9 F7 @2 x6 ]# ~6 w4 C9 w
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ( F1 x1 Z( N/ M1 W- Z& q8 Q) I+ K" d
return v;: `+ w* }" v+ I! c
}
; c0 @6 p( [' q: ?
1 |1 i: X* O# T) M, h! l7 `5 l//两个vector求并集
9 o0 c# E9 ]- s: B7 P K5 \& Dvector<int> vectors_set_union(vector<int> v1,vector<int> v2){9 g4 o4 R- t, K( ]6 u+ y# m
vector<int> v;
4 u4 K$ j) q9 ? sort(v1.begin(),v1.end()); ! ?* h* z. j! s T
sort(v2.begin(),v2.end());
8 c% C% ?) E+ M+ z+ x% @ set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ; x, K! R3 F0 S0 L
return v;* q$ P; `; T6 e- H. ?3 _8 i
}
d/ ?' ?/ l m$ D6 Y& A* ^ 6 c0 Q- m2 W3 Y/ ?
//判断vector的某一元素是否存在
6 {& X5 J' R5 b! Bbool is_element_in_vector(vector<int> v,int element){
) _6 b$ B# t" P, m vector<int>::iterator it;
2 r6 j _$ S+ B it=find(v.begin(),v.end(),element);( C- p7 [* E: J- n- [
if (it!=v.end()){
' X% C' g4 w& Z" Q+ r return true;
7 m& ~8 Q) W; R }* e- Z! r4 {! h& ? v
else{
. {, |# D# ]: t) [2 A return false;
" Y, r4 S. A# a( O( W }
- f2 X* `, [! A' x* O! Z}
* c6 i% q C" K3 R" K, D+ T& q
1 g: R- D4 ?6 H! |int main(){( w6 @5 M; F2 l" B4 G; u& Q* s
vector<int> v1,v2,v;
8 i/ z3 ^% F1 Y" L0 y v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
' I" j. S/ J1 ` cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
/ U/ p- D- K6 B2 i! w) n4 A cout<<"对v1去重:";7 B' x' Q0 g% u7 a5 Z) p& k" t
v1=unique_element_in_vector(v1);
& P- Y: M4 c+ c print_vector(v1);. b+ `3 p5 B; b: h& p) a( c
cout<<endl;9 |: @. Y0 p+ S K Q X
cout<<"求v1与v2的交集:";
% ^' x, V; Y a4 D v=vectors_intersection(v1,v2);4 r5 ` B6 N0 h2 \- X% A6 x- m: |- _
print_vector(v);
7 P& [5 z% L- n7 d( u5 U cout<<endl;/ P; f0 x' U3 z7 g$ a
cout<<"求v1与v2的并集:";
- a8 i X4 V- d" t+ D9 e v=vectors_set_union(v1,v2);
2 H6 S' I+ z5 d print_vector(v);
3 F( A4 ^0 [. S: J, z5 W- q3 r return 0;
3 p7 }' {* k- j! c2 u' q8 S2 J% q}[/mw_shl_code]
1 X( l/ H) i3 ?3 B, G* B$ u |
|