|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
8 E. K% O7 j( ?7 m
/ f' e4 G6 T1 @3 _% C4 z8 {C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
( H* i- p4 ^+ t3 ?$ n: i8 E[mw_shl_code=cpp,true]#include "iostream"* n) T' m0 Z6 s8 A8 X F. u
#include "vector"
* g, \) ~/ Y' R- |2 F: Q#include "algorithm" //sort函数、交并补函数. W' ` y, m6 G
#include "iterator" //求交并补使用到的迭代器/ ?" S# d# D6 ^; M
using namespace std;+ U9 i& F1 h! m# u
! \/ t: ]" I! G, ^2 ]7 O* ^//打印容器vector3 A) X5 v4 K) z' h
void print_vector(vector<int> v){+ I5 S, [/ g) v# ^5 p; J+ \
if(v.size()>0){
& x/ F9 v; C7 `! A' C6 C# i$ j; ` cout<<"{"; " G2 M* [. `8 u5 N
for(int i=0;i<int(v.size());i++){
: \! @6 s5 h* A+ i cout<<v<<",";
" h- e0 U1 d1 K- c- I1 C N4 L }
9 `+ T2 `) J+ R; s( I# g cout<<"\b}"; # |& A* p% j* \$ C0 `2 p
}$ L% w* D& f* l. l
else{ ?# z3 u2 w( x4 V2 v
cout<<"{}";
/ |" X0 ^; x3 G }
% i4 @/ L* f* b5 e R0 c* I- G( e}: j4 h2 a5 q7 e" g
h) R9 U: o) N
//容器vector中元素的去重
% ^" p$ E* I/ Z1 F/ `6 I! C5 Cvector<int> unique_element_in_vector(vector<int> v){2 o; ?0 V" E$ k, @( ^
vector<int>::iterator vector_iterator;! k5 Y( ^0 N, [1 Y" F
sort(v.begin(),v.end());+ b" ~' D, r. \5 d- c
vector_iterator = unique(v.begin(),v.end());; \9 j& l' t0 C
if(vector_iterator != v.end()){
7 c# Z0 r( Q# z' m/ @. d, \ v.erase(vector_iterator,v.end());
7 W7 X2 u( T6 f8 o/ K, `) ^$ O }2 E+ t" o$ e1 ~
return v;4 ]7 D. v, G. f; M6 x0 R0 ?
}
- A! {6 @% N/ ^ ! [! V' j1 |9 a9 d
//两个vector求交集8 @' \; d" ~* S
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
/ n) v; ?- o0 K6 ^ vector<int> v;% P1 |: y$ z' Y5 q' r' t+ n4 `
sort(v1.begin(),v1.end());
- \3 y& Z) W! ] ^2 Z/ E sort(v2.begin(),v2.end());
7 K+ d+ c; t; { set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ! k0 x; I, @$ C4 b8 f/ F2 M( Z
return v;
8 f. i0 Z9 A" F# ]6 n9 `" `}. c8 Y" D/ D4 g6 J$ B8 g2 D. ]+ U
5 S f$ [& b, m, s8 x//两个vector求并集
: M8 r, x1 v' R. i* ]+ rvector<int> vectors_set_union(vector<int> v1,vector<int> v2){0 d4 V1 E0 I0 o' C2 {7 X
vector<int> v;
. `# p: l, j. E) i, K, s+ m sort(v1.begin(),v1.end()); 5 I+ Q* R6 G, j
sort(v2.begin(),v2.end());
+ p* D6 t7 q+ F% B$ W# w set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
" V) \4 {" M/ E( g* {& l, \ return v;
4 u' q* _: r7 J% J. y}
6 k% D6 H, d% F/ e
% n ?6 m0 s- D$ U1 E4 I! }4 c7 Z//判断vector的某一元素是否存在
$ }7 z" d0 w( P( qbool is_element_in_vector(vector<int> v,int element){
U/ _: `1 y& w2 u1 @ b y vector<int>::iterator it;; \/ i+ w' Z* V: |- j3 a" H; V
it=find(v.begin(),v.end(),element);9 T) r4 d0 Q/ J9 d2 T
if (it!=v.end()){
! ^4 D2 z+ R1 R/ C% H' f' h7 d* Q return true;2 U `3 ]: H3 ~/ {. \8 r
}
1 w% ]- f% c B# w- u' j. N else{7 s: r+ k! \9 M
return false;
; l" F0 b0 d j- U1 Q' v }' y) h1 m* F9 I
}3 P' s1 d* p5 w9 @' [
0 ]9 G% R6 P* n- f. p. y6 z I
int main(){$ k0 Y; e& O- _3 n
vector<int> v1,v2,v;' S# H. s! Q1 S2 N* J/ W0 t
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
" O- W( R ]2 W cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;& p" l4 D1 D8 }5 s4 f4 n
cout<<"对v1去重:";! C6 L4 t9 d7 q `5 a3 o9 ?
v1=unique_element_in_vector(v1);
$ T# ?5 \+ l2 k6 p0 ~/ @( m print_vector(v1);3 T2 ^+ K" f* T5 b+ O, ~
cout<<endl;, v# f, b3 o8 f
cout<<"求v1与v2的交集:";$ p9 t8 N$ D( ]2 C% F
v=vectors_intersection(v1,v2);
; E) G R' N J2 H) C0 O) Y6 t5 F print_vector(v);
3 w6 l1 f1 @/ }' u6 C4 C4 A cout<<endl;
0 g9 y1 I! }; W O/ e8 k/ {/ @5 z5 [% n cout<<"求v1与v2的并集:";
9 ~ _* A7 r1 J- Q3 b v=vectors_set_union(v1,v2); x- ?6 q. o s2 y0 f9 A+ d
print_vector(v);
/ a0 y, k7 H0 _( m return 0;9 R) k, F2 d0 n- ~
}[/mw_shl_code]& f+ g/ S& L# c, K
|
|