|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
0 x+ |* }; f. R* k* C( K+ I2 t3 B5 y+ K- F; X) H5 P# n
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
9 {8 O6 M5 O+ h[mw_shl_code=cpp,true]#include "iostream"4 _0 ]5 y2 t2 t ?
#include "vector" / ~- h. a) f5 A1 `
#include "algorithm" //sort函数、交并补函数
( q2 H& i; r- p* E$ C% Q#include "iterator" //求交并补使用到的迭代器! [% k7 X ?3 q9 z& _
using namespace std;4 A3 d( E( T/ @
0 y O4 R7 _- n4 ?1 e: N6 y
//打印容器vector7 ^5 i) u3 l' B3 n! H+ f. |
void print_vector(vector<int> v){; F4 S: n) B {6 o8 T. H: |# T
if(v.size()>0){
4 ]4 z. _7 p9 e8 F# T cout<<"{"; , r X9 w' _0 m; n
for(int i=0;i<int(v.size());i++){
8 x& h( L0 m' v% M1 G cout<<v<<","; 7 _% a* C/ _6 ^( }8 G
}
- r: q( H) A% ^7 y/ \8 w: I, e cout<<"\b}"; " v! P, C! K/ g% D
}9 Z9 l* y, Q' s$ H# E
else{
6 k3 u7 h6 i; L8 x% Z: _, J& W cout<<"{}";
$ G' P/ [6 V4 w- C; v" d7 b }
/ I' T# Y: w$ o6 y1 q$ L" Q$ v- b}! Y3 R: }" |, A" f% T) S
0 z R b" c8 q7 d//容器vector中元素的去重
" ]6 k! L8 W9 U# S8 i! ^. ~vector<int> unique_element_in_vector(vector<int> v){
' P: I$ R- H' U5 `1 h vector<int>::iterator vector_iterator;9 a; N' {$ P% m* d, @
sort(v.begin(),v.end());
3 t8 U' D/ w" h9 b vector_iterator = unique(v.begin(),v.end());, J; x2 d* _% R* p
if(vector_iterator != v.end()){
3 w0 [( n% Z \. p; c9 S v.erase(vector_iterator,v.end());$ I# P& y, J. X. ^
}
, k& i( F) @( R) N return v;" ~3 D" ?! k) a- c9 [
}7 {, A4 R E. l9 t3 R; ?/ m( c, H
& P# R7 [. n% n! R6 R//两个vector求交集
: K3 y( {0 x: o9 O! uvector<int> vectors_intersection(vector<int> v1,vector<int> v2){2 t8 F% W, ?8 ^5 ]+ [9 Y# g
vector<int> v;
6 i7 H$ v+ D1 U5 M7 v sort(v1.begin(),v1.end()); 1 n% M t( y% Q5 L
sort(v2.begin(),v2.end()); * T: [3 J5 f, `* ^' m! A7 f8 F
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
{; R8 h( i- ~2 e return v;' Q: R& m8 k Q
}
0 u/ R- K* V# a( p3 G0 a& B S6 ^ . g% w( q3 s3 _3 f X2 X
//两个vector求并集
) u/ T' \/ @1 a g. w- S' Uvector<int> vectors_set_union(vector<int> v1,vector<int> v2){0 z( F* u3 r# b- W2 c$ X! F p
vector<int> v;
3 p; o8 @' H) N* K) E0 Q6 s# c5 | sort(v1.begin(),v1.end());
0 _# H7 S; F) C. D* _ sort(v2.begin(),v2.end());
% z8 a" q% \0 j% I, m$ c" b( p- \ set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
/ C3 y# m$ k7 u+ F: K$ w. ^ return v;
: O) b" G' H1 u3 K7 W& N2 ^}' o7 R1 }8 P, ^- S
9 I4 d0 F! n) }3 r! L1 j
//判断vector的某一元素是否存在
, x, B6 Q x. \0 Lbool is_element_in_vector(vector<int> v,int element){5 z- C* p" T# @6 j5 }! C, T0 k
vector<int>::iterator it;5 z Y4 l2 R# a' p9 k: ~
it=find(v.begin(),v.end(),element);+ S& q! G$ y* x" k1 T9 y
if (it!=v.end()){
' X" l9 c* L6 n2 v return true;
9 }3 h' k" I' ]. ~ }
O3 _5 P1 _1 L' r. r; b9 a9 L5 L else{" F1 l9 a3 g ]! l( m! R
return false;
: Q3 q* q: @, }0 V5 Y! z }
* G* C% R' V T6 b8 E}
0 G* n2 ?+ G2 `7 w" W! J
1 Z9 B) w4 c! G" Qint main(){
* a t2 m$ p3 _4 m7 C3 d9 Z* w vector<int> v1,v2,v;: J* c+ s9 C+ L5 _! V
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);. l" h9 n; I: u4 @+ h
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;1 `7 G% F# p$ Q! f1 e) `& {# t
cout<<"对v1去重:";
9 T+ m: M0 C# Y- W8 p v1=unique_element_in_vector(v1);- l+ a9 x+ T2 N5 y4 N Q% k8 \4 i
print_vector(v1);
) k8 T4 H7 _( v: m% y. ^ cout<<endl;
3 M3 y6 C. @# A/ B$ ^( ` cout<<"求v1与v2的交集:";( c0 M$ s, z2 `( r
v=vectors_intersection(v1,v2);
1 ^" u3 m& N' \; E. N+ E print_vector(v);
# K; }3 O5 v0 T1 ~) {" ~$ f cout<<endl;
- z" K& u: ^: Y0 `: u* z' b3 O cout<<"求v1与v2的并集:";
4 p% [4 b1 R5 b1 r2 U |. e v=vectors_set_union(v1,v2);9 N7 O$ Z; @9 P2 f
print_vector(v);
N0 [$ g1 n6 u M `7 m return 0;% j' B; k& s0 W3 }3 R! q
}[/mw_shl_code]
+ e# _4 e' ?+ x& L" n |
|