|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
0 c: S1 N0 _) t" I6 [, e3 s9 `
' [! e% C' \6 e, S: p" N$ P. cC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
. n. L5 f+ X, O[mw_shl_code=cpp,true]#include "iostream"
' U! [& \+ h0 B5 X#include "vector"
2 u( c% T; a) J" r2 w) o m#include "algorithm" //sort函数、交并补函数
. Y8 N8 }4 t' l0 S2 ~5 l( V- t/ `0 r#include "iterator" //求交并补使用到的迭代器
0 [1 k, l. M: H. J6 ]. W2 _using namespace std;
; t0 I- P. {& S0 G/ Q
- c' L3 t- m V3 `& M//打印容器vector( Q" q% I3 Z2 ^0 |( b$ T
void print_vector(vector<int> v){
, W D' ~% M6 D" h4 N( @: o if(v.size()>0){
( L, k1 c: @5 p cout<<"{";
5 X& ]# L9 `$ _: y$ F6 P% b' w for(int i=0;i<int(v.size());i++){ 2 v1 N/ U; |% @9 D" `3 `9 d
cout<<v<<","; - j5 T E4 E1 j+ a
}
4 a, V- ]+ T$ R' a# Z cout<<"\b}"; % \* A) s' R1 k' H& g
}
( S f) h% x6 k# Q$ [ else{( H4 \5 m- `: e2 `; A: a
cout<<"{}";7 u3 n W8 u: W6 g
}0 |; r% R0 M$ c N! [5 l! ]% _* |" ?
}3 Z8 Z; @- U# W/ c
5 O( V2 M8 k3 d: y2 K
//容器vector中元素的去重
" v$ z" a7 }5 v# Ovector<int> unique_element_in_vector(vector<int> v){ ?/ `" B$ \# F$ j2 I& S
vector<int>::iterator vector_iterator;( p5 S( h3 }: M* P' n0 e# T
sort(v.begin(),v.end());4 S3 R) M$ p* N$ o; { _& P/ P
vector_iterator = unique(v.begin(),v.end());
. S* ^( i+ G% I if(vector_iterator != v.end()){, n) Q2 P8 w% K+ @" k
v.erase(vector_iterator,v.end());
4 s' B; M6 {8 i ]9 x: y }
% G0 i) e* ?0 t( e( U4 o: p return v;
: H+ h& ~) q3 O- x}, a- p0 {% b' |$ m
! J5 q! E- v1 c' Q Z( _, y) I* k//两个vector求交集4 d w2 C; F/ u; c+ d+ F
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
6 j0 \: {. X# V5 q: R3 Z, \2 u vector<int> v;, z6 y1 x7 G4 L; e
sort(v1.begin(),v1.end()); . _$ J6 S; q* f" R
sort(v2.begin(),v2.end()); , i+ X! j' q9 `% v& i$ t
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
/ c6 M, w' f( Q/ m2 X return v;( P0 N& q7 s& J
}
/ G: q K) u3 D$ g5 a5 [( |
2 {9 ]' T) b$ Y9 ^0 h: U//两个vector求并集5 P ]) H$ Y4 o
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){6 Q0 b$ \" p0 H
vector<int> v;
! @2 \5 _9 \3 O" |& j9 h sort(v1.begin(),v1.end());
- n0 z* m& K- ?: D sort(v2.begin(),v2.end()); P R) t2 U' U# n. b
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 S9 a; V% z- }; k. x! f3 q
return v;
( o; ?2 C Z3 m}2 i: T9 _+ T8 `( q
' D6 W7 A$ k9 d- ^3 m, C6 U" e" Q
//判断vector的某一元素是否存在- j4 H2 b7 ~9 m* ^9 W8 q5 ^
bool is_element_in_vector(vector<int> v,int element){, h0 `6 m+ \; A& ^+ E; {0 B
vector<int>::iterator it;
) z2 }2 ~* R# I4 I. l2 l" k it=find(v.begin(),v.end(),element);
2 U9 H! a& ^$ V' P0 U8 q if (it!=v.end()){
' H" W2 B4 \4 ?# N return true;
- M0 [3 u5 w3 p& x. g* ^/ g }
- ?. b: N2 }" T& G0 B else{0 f( m' a9 Z9 j" T- m: d q
return false;9 |3 k- c" u8 }. U
}/ S& O0 c+ ~8 [: E. \- S# Z
}5 \: Y- z/ y5 U5 p+ M- M+ V! ^: Q
6 d0 J1 c) y! ]' y$ }* Q! G# nint main(){
9 I& _. @0 N4 [3 a; t vector<int> v1,v2,v;
$ ~0 u, K8 U$ w! \, k8 d v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
0 I5 j1 t' k6 }1 z& n cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl; z7 Z# b4 z% ] c; ^# w1 H
cout<<"对v1去重:";7 {0 n9 K! V% F
v1=unique_element_in_vector(v1);
/ ~) o0 e! O( @# f1 X print_vector(v1);
( a$ F& a! o C1 l1 W cout<<endl;" A ]1 `/ P9 g$ t; N
cout<<"求v1与v2的交集:";" k1 H( G `( n; M3 F% O2 t
v=vectors_intersection(v1,v2);
5 b& v7 P, e. H, X$ K) A print_vector(v);) `5 k7 `+ x0 f/ E3 G1 H Z' ]
cout<<endl;
2 D6 L: L. ?+ ]% ]6 s6 Q cout<<"求v1与v2的并集:";1 A5 n4 |0 @9 R! o O' T; E
v=vectors_set_union(v1,v2);
; W" \0 a5 l; Y+ f" x$ |' [2 f, | print_vector(v);- ]- k; z1 z. f: P1 X) A3 p
return 0;
4 s' q8 |0 M7 F/ J! J3 u w! N/ ^}[/mw_shl_code]3 q8 d8 C, o/ p6 }9 U% [$ k
|
|