|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
3 L9 b' p7 Y" h' V% @
1 P( }7 E; Q3 l; N7 M
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
8 s2 M9 A0 ]( W1 y6 u1 R0 z[mw_shl_code=cpp,true]#include "iostream"& i( O1 I5 S- R- Y* [2 \
#include "vector"
, Z. z2 H( [ g K. ?#include "algorithm" //sort函数、交并补函数
5 z- z& R4 t' w; N4 P$ T#include "iterator" //求交并补使用到的迭代器
5 v: _ @) x4 R6 ausing namespace std;
. b7 g* @4 j: {- u , s6 c' H+ M" c6 W1 q
//打印容器vector# Z4 _/ O. i8 c
void print_vector(vector<int> v){
, k1 @' X# V/ ~' n1 K if(v.size()>0){ f: V5 |1 \; ^ v; M
cout<<"{"; 1 C- @; [/ n; k/ _7 I
for(int i=0;i<int(v.size());i++){
m, I7 F/ Z+ Q1 [7 M cout<<v<<",";
1 C- P6 Y/ p+ L) C; m } % n6 P1 G: a; [+ n
cout<<"\b}";
# k& N1 G3 z1 k- H! c }& ^$ o6 T: z# Q3 t( j. @ t& b
else{
! |6 J$ R& g6 O. q5 |3 V cout<<"{}";7 T5 Y3 C% Y5 s4 p1 u+ \
}
& B! c+ ^0 Q9 G! h% X; f/ u}9 j/ k& ` @2 [
! ~# p" @0 `) e* w
//容器vector中元素的去重* Q+ e, f2 U, [9 t) S6 i6 ^5 a
vector<int> unique_element_in_vector(vector<int> v){. ]. b1 w; O! p$ D$ z
vector<int>::iterator vector_iterator;
, O+ F9 r/ F4 J8 w' h E. X# }* U sort(v.begin(),v.end());* }" |( N4 M5 n$ z
vector_iterator = unique(v.begin(),v.end());
. [# H) s+ @. D% x" P# g5 ?7 f if(vector_iterator != v.end()){# m9 b) G ]6 R0 l8 @0 r( @8 M
v.erase(vector_iterator,v.end());
7 e6 g% _ u2 ~% ^4 b7 _ }
% E+ v5 B( P; B/ G9 y9 l return v;7 H% o/ m- g( F( O
}" w, P) V% S, t# z' Q
0 a) q; ^9 {; [' x0 g# d
//两个vector求交集
" G7 A% B) e' |: _. `" c2 B8 `vector<int> vectors_intersection(vector<int> v1,vector<int> v2){) F5 Q5 l8 |0 H5 t
vector<int> v;
0 v4 C& I" v7 n9 |- S sort(v1.begin(),v1.end()); 5 _- ]" B6 ?1 C: v
sort(v2.begin(),v2.end()); , Q- V7 T! X4 z$ D
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
, r6 u0 Y! p. f Y7 Q% D return v;
0 f8 i+ u! e) w* `& x3 s}8 ?$ w0 B. a5 L h* m- x
* a; J% r( `% k//两个vector求并集
1 x+ y0 j( T2 }vector<int> vectors_set_union(vector<int> v1,vector<int> v2){6 u; W' [ Q" [2 ]2 D' U% b8 \4 j' D
vector<int> v;
5 W. ~, G$ w* \ R/ G0 S sort(v1.begin(),v1.end());
: b& W8 N! a4 C sort(v2.begin(),v2.end()); 3 y9 M/ g, f9 y' Q v
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 " X- ^8 @. S* L8 ?: Q- [! E: }9 `
return v;
$ L" Q) J$ j7 r4 r}* j- J2 l6 a4 @$ D# v$ D
, L5 g9 U9 a/ L
//判断vector的某一元素是否存在3 y$ B/ Y& k# k" S
bool is_element_in_vector(vector<int> v,int element){: G6 x' v ~8 A- I& J& p2 R
vector<int>::iterator it;8 g l, Y2 ?4 l1 `1 k8 Y
it=find(v.begin(),v.end(),element);8 S& D- g, t1 j3 |% k
if (it!=v.end()){5 R; _/ D% a) B
return true;
9 B4 a4 D0 d/ X& r t }
; Y6 Y& ^/ R% ?+ d, b" l7 ? else{
# f5 c- D. Q1 Q return false;6 t" \2 K8 ]& `8 C3 D5 |! Y
}- u- O+ ~. ?- I9 l$ \5 }/ G0 n+ \
}" j8 Y/ _3 X7 }: N3 T9 i% \- _
( R* A! s+ B! J+ b6 k
int main(){
" w0 m- T* s4 F5 q! v vector<int> v1,v2,v;
6 l I5 i! e ~2 U$ a" @ e. p% X v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
. q# p2 l( G& K% \0 q2 u& R+ ^ cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;/ a. t9 G: }, F x5 f `& J3 F
cout<<"对v1去重:";: P3 f- G$ t/ B2 [' N
v1=unique_element_in_vector(v1);( E4 r- L- G. n, h$ M
print_vector(v1);. X H$ v& g9 \1 f5 F" y; ^( V" B
cout<<endl;7 h4 ?) @" g5 J; x8 p
cout<<"求v1与v2的交集:";
- [& x- l h" F3 t; L: ^. ^ v=vectors_intersection(v1,v2);
% h7 O2 K3 r) a! J print_vector(v);% V, }5 k t9 m7 b- q# P e
cout<<endl;
; ^( ^8 P, x1 J. Z3 s cout<<"求v1与v2的并集:";
, G+ d& A2 W& g" g o v=vectors_set_union(v1,v2);
9 C& F# d6 B* _" h print_vector(v);
* u7 u& a5 z- _8 c return 0;
1 Y3 N1 n! G4 S6 w ]) H}[/mw_shl_code]
- U6 ~! h5 [2 B! b( @* ] |
|