|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
, V. p* ?8 p3 W0 ?( h) p5 Q" w
7 x% `+ m0 j; ?- G% t: iC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
% g3 p X) f; E4 C9 I5 I[mw_shl_code=cpp,true]#include "iostream"
5 v" O; G7 L% n1 a* a9 X3 q- j) D2 G#include "vector" # E; t; [2 M4 E; H2 ?
#include "algorithm" //sort函数、交并补函数 n7 b+ V* f6 u1 n- W0 S3 ^
#include "iterator" //求交并补使用到的迭代器1 s4 ~" b! m3 T Q- G: r( p9 H
using namespace std;1 d! T9 M' b0 b/ E6 t" m0 c& p' U
1 X) t, x! Z8 f4 ~# X
//打印容器vector
; }6 c/ I0 i- ~1 Fvoid print_vector(vector<int> v){
% x. w2 x& S5 n if(v.size()>0){& z. _, A7 X( |, c6 a) R. D
cout<<"{";
& f! ~# R" {- f( @( J0 f/ Z$ q+ { for(int i=0;i<int(v.size());i++){ 1 Q$ r1 P7 Q1 x, k
cout<<v<<",";
, P$ O4 u! N3 f; w- w7 z } . H; o; v8 T& x9 l& I7 J( L& c
cout<<"\b}"; * S$ i" w5 o; Q' L+ A0 c+ Q
}4 u! C. \/ `) ]
else{
8 U5 h+ J+ z1 _0 I cout<<"{}";
2 _. j! k, M2 H/ ]: u/ v }1 D6 x- U! A0 S1 l0 p; N& }0 Q* T2 G
}
/ N* o# E. a2 O2 f: ~
7 v6 z R# j9 x" H8 ?//容器vector中元素的去重# y( [& g, O5 n
vector<int> unique_element_in_vector(vector<int> v){7 {9 e Y9 w0 Y8 Z- [
vector<int>::iterator vector_iterator;
2 O5 i& D" s" l8 I; x# ]3 Q& L6 j sort(v.begin(),v.end());
) w1 Q; L- x' {, ?6 u vector_iterator = unique(v.begin(),v.end());
, J/ M8 w: d/ `: n* Q' _+ w if(vector_iterator != v.end()){/ |; p1 e- j$ n6 g0 M
v.erase(vector_iterator,v.end());8 J- P. T1 B g1 l
}. X6 w3 Q/ V3 m S2 h% V$ ^
return v;
$ r, L: Z e4 ]) ^4 X+ F}: v) {5 o% y6 A5 E
) m# p5 w8 s( ]7 Q4 t* S
//两个vector求交集
' m: d) [' Y4 }2 v; l# ?$ Q t( I: Evector<int> vectors_intersection(vector<int> v1,vector<int> v2){4 K3 p! L$ \6 M- m! T" F i# y$ j
vector<int> v;* j h; J4 |, r- N" v: {0 l
sort(v1.begin(),v1.end()); o( a9 @8 E+ J. c* y+ d2 M) ]' \6 ?
sort(v2.begin(),v2.end()); ; @5 H9 v; w2 j: b2 l
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
3 n/ k" o) K$ n+ b, j return v;
: g; s" d4 v" ^6 l1 s5 t}1 B* j' |+ D9 O. J3 R
- ^# e) e. `# {8 w5 {3 ? S//两个vector求并集
, v/ y1 [# |- w. d1 ]1 bvector<int> vectors_set_union(vector<int> v1,vector<int> v2){) X3 C# d6 V: j) u5 |! R
vector<int> v;
! X$ G6 n8 i6 D sort(v1.begin(),v1.end()); 4 r j0 O7 X4 U
sort(v2.begin(),v2.end()); 1 {) ?* V2 i4 m* ^1 P
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
. p! H8 c. B; F- A return v;
! [, E1 F7 C, E}- y P+ M$ V9 h$ t$ t: F4 f
6 {6 t* G3 ~% S# Q//判断vector的某一元素是否存在
" v4 a' }# L: L, Abool is_element_in_vector(vector<int> v,int element){
, [1 O" M0 y9 T6 _6 u5 C9 |; U5 G4 @ vector<int>::iterator it;8 F }! D' o2 E; `5 ]6 d
it=find(v.begin(),v.end(),element);
: x3 g8 U- Y( j( M/ N if (it!=v.end()){; Y* y7 M$ \1 e; f; Z2 v
return true;1 i. T5 n: k" K3 a
}
2 K" K# v) `0 ~ else{
; `# ?, G* t b+ I: G, ~ return false;4 U1 y3 x$ P& r6 W$ _# D0 L
}" f- n: Y r* N+ B) O+ c
}+ q% a% R% F; X( g
8 [8 C- h) n! b$ O2 E/ a
int main(){
3 _% J$ c5 z4 B vector<int> v1,v2,v;
u" v" O* L& y& K1 a7 y( b v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
2 B4 ]. d' s' M) V# v5 D cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;5 ]& i' r- O& t) S2 y$ t& M
cout<<"对v1去重:";
! O2 H X8 I& _1 _& `+ G v1=unique_element_in_vector(v1);
- j, @1 C5 j0 J, q: y6 c$ {( y, q print_vector(v1);
3 ]# }1 ^2 c/ k6 y cout<<endl;
2 i* g! Z5 ^) l7 q cout<<"求v1与v2的交集:";6 O& j2 E9 V* _0 f8 U% X
v=vectors_intersection(v1,v2);
! M) o% K) y! ^3 g! f! g6 i$ L print_vector(v);
5 A- j4 n( i. N cout<<endl;( d4 H" W: f$ \& O2 ?: b
cout<<"求v1与v2的并集:";9 m0 C' I6 q/ k5 Z( \
v=vectors_set_union(v1,v2);
- }2 o4 z: M* w L9 Z3 L+ q4 m$ d5 b print_vector(v);: S6 A4 l6 l! C" s2 l7 g: P& P
return 0;
$ T- | b, I$ Y% H0 i, v8 ~}[/mw_shl_code]
0 C7 f9 G# [( d1 m- K6 r/ g |
|