|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) W7 \- k* ~: z' x) {3 h" J) ~# \& Z
. e9 ~# {) j& o1 G
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
$ q1 B1 c2 \5 R! c' V3 u[mw_shl_code=cpp,true]#include "iostream" c/ [+ I$ j3 c
#include "vector" 8 F& S6 [ e/ ]3 f4 H
#include "algorithm" //sort函数、交并补函数
3 e/ G1 R1 g# c( Y' z. o+ @8 C- e#include "iterator" //求交并补使用到的迭代器
: m$ M( O% H# u- lusing namespace std;% R( w5 o4 Q$ x; z
# ~- i6 D; ~+ V- i
//打印容器vector. q) D$ t9 u, i, x5 `$ [4 |
void print_vector(vector<int> v){& K$ @' F, J2 M' ]
if(v.size()>0){
$ m( r. X3 X. r. R( B" T9 E' [ cout<<"{";
1 [6 |- Z9 {/ J! J( v9 B for(int i=0;i<int(v.size());i++){ $ [' W3 J9 x- X( @% E/ R
cout<<v<<",";
9 n$ Y/ Y2 J; R } 5 O) k: @% ~7 b) }0 K( S9 J
cout<<"\b}";
+ A# x9 F/ M- q- b I% v8 V0 C }
; P1 V/ Q0 F$ `7 D+ g# J else{- J, g* {5 o3 H9 y
cout<<"{}";
0 v' o) C' V, l; r }1 l# g% A% e5 R% X( J) W
}
- _+ E4 M- P3 p. H8 x7 E- K2 m
4 Y! c- g" ~6 m//容器vector中元素的去重$ g/ g: j* M5 ^
vector<int> unique_element_in_vector(vector<int> v){; e* h& A# k# ]; z, l5 Z p. T3 \' y) g
vector<int>::iterator vector_iterator;
% I) G' o, d% j B" h* N, p sort(v.begin(),v.end());2 S- u" X, F7 Y: z0 P. Z
vector_iterator = unique(v.begin(),v.end());! z6 V, J: {6 y) m
if(vector_iterator != v.end()){$ r) N$ J- K9 i8 i' x, x: ?
v.erase(vector_iterator,v.end());! r' L2 T7 ]" C: C2 e+ [1 W
}+ e+ U6 b5 `% I: Z1 N& f
return v;
! `) ]. [$ c* b( R) w, B}
* w. }3 y# y8 Y- y * Y) M2 ~7 b7 K+ D$ B( p
//两个vector求交集
u; B; Y! ~) f- j8 N0 ~8 Gvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
" m/ C2 g9 W% s0 A- S2 d* A vector<int> v;
* b% f/ I9 U' M5 L1 v! x sort(v1.begin(),v1.end());
7 P% l* ^. C# Z/ ?$ r) S sort(v2.begin(),v2.end());
1 V( h9 a+ [# a9 m# T& x$ Q! s6 I7 E set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 5 e, p8 B$ X. L f7 e" T' ], w
return v;
. X( N2 i& ]% O$ g$ ^( L& D( ~}
/ l1 M0 o6 t4 u `0 `: p/ J
' M2 X* ?: e; p1 v9 |//两个vector求并集
5 ^4 v' y4 S1 i Q& k# Ovector<int> vectors_set_union(vector<int> v1,vector<int> v2){
$ H4 `! ^! o. v }" I$ j vector<int> v;% ?( _3 G* G2 a, d% J/ z! W# D
sort(v1.begin(),v1.end());
% \. _) M% o% a: U8 d' g7 s sort(v2.begin(),v2.end()); ) z7 k4 Q3 M( t. ]6 w. w, x
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 # a# x H* w9 A6 l5 C0 e' Q: J
return v;
8 C6 _" J( K1 H* @6 h! h# {1 R}2 h: c" Q5 v. F1 d) v
# L* q) {' J2 _7 I1 d; k6 T//判断vector的某一元素是否存在1 T1 u$ ~% Q1 v% h: U
bool is_element_in_vector(vector<int> v,int element){
8 ?9 K% z+ b9 N2 e( y) M' s vector<int>::iterator it;
. x8 l( u* }) C/ T$ ?8 Y it=find(v.begin(),v.end(),element);7 t! a4 Q# x$ ^" F
if (it!=v.end()){
* J/ ^+ T0 o2 d return true;8 \' N, p* g- x9 U q1 ~( r
}
$ d/ `5 C2 l' r/ u+ L8 x! o0 p; ` else{% k, o6 n3 B8 C6 a
return false;
* y; A& k- ]9 v" r' S }6 |2 t: Z* M) R. I/ x) m: S5 a& ?
}
1 y; i; i7 q8 x& U/ q# T / i+ C# _6 l5 ~1 R6 z+ g5 a% \
int main(){
9 q. n% ^% J( R1 K8 w0 I vector<int> v1,v2,v;
2 h. ~4 n9 q3 ?; g% s v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
3 e3 w: ]* G* x- A cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;6 B4 V) a# K" B0 w4 S$ m) H6 {
cout<<"对v1去重:";7 |( _+ T" k3 N3 W# q3 P9 ^
v1=unique_element_in_vector(v1);
/ G; W: I9 W: i print_vector(v1);
4 u6 D& H. f0 Z7 p9 B( ?( q3 [5 X" T cout<<endl;
4 f, x8 Y8 g# \! S1 ]: L2 X+ `9 @0 O cout<<"求v1与v2的交集:";) p# f! H* M! [# J: a! h1 {( J
v=vectors_intersection(v1,v2);% x0 U1 n8 K( [. C8 C: t
print_vector(v);7 I1 C# n9 h- K' @9 n& e3 |3 X
cout<<endl;" ]8 G) {0 l) N2 S
cout<<"求v1与v2的并集:";
2 C+ z6 A- g5 Y o v=vectors_set_union(v1,v2);
) G5 | [) a* D8 X7 x- B print_vector(v);
. v( ~- a1 l- C' N return 0;
/ a$ ?1 N2 m+ ^. s6 w G/ j}[/mw_shl_code]
& `; z# P* w: o; N; H, K1 Y |
|