|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% I; }" Y2 J! }( c/ V$ L1 p
7 b0 e. o7 D- ~C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
+ j/ Y3 c7 b9 H+ D1 O$ m( U2 {[mw_shl_code=cpp,true]#include "iostream"" J' M% a! \8 q5 H' ^. {
#include "vector" " E$ i# v0 J0 g, b
#include "algorithm" //sort函数、交并补函数0 g& o" r% ?* ?! b
#include "iterator" //求交并补使用到的迭代器* T5 B% q) L) r
using namespace std;# o1 l: P' a. |: o9 [' j
3 E0 Y, b4 P& c- a( r2 U
//打印容器vector
9 Q3 W& }- h# \* J; r d% ~void print_vector(vector<int> v){& F) c F0 g) [: H
if(v.size()>0){
% m# v/ A/ p6 `6 b cout<<"{"; + ^5 K/ k! H# L, q: @
for(int i=0;i<int(v.size());i++){ 4 \$ C9 i+ [- z4 R' d
cout<<v<<",";
' ^9 H1 S9 _3 e6 A- ?, a- j }
' Z: O7 p1 h, B1 B( } cout<<"\b}";
0 d1 H% Q7 ?; C. v: }: n }
6 ^4 ]+ \# E) C S3 o4 p else{# j; i3 A, r7 X4 Q$ s
cout<<"{}";
" v# m4 s& Y" E- e7 O! m! y }$ v" P- G' _2 u, F) a) T4 Z
}+ l* L3 ^/ d" \
8 m5 j, o, s \" r5 ~" ]& |- p//容器vector中元素的去重. E( l0 k) ^+ q& m! a
vector<int> unique_element_in_vector(vector<int> v){
7 k: q! O8 I# J7 I/ q vector<int>::iterator vector_iterator;
3 @' D' F- M5 g% F: D sort(v.begin(),v.end());
0 x6 s: S. _: a$ Q7 v) C0 |: f1 K vector_iterator = unique(v.begin(),v.end());1 r' m8 H) B |" o% C( I
if(vector_iterator != v.end()){
) ^. n4 z6 E) Y. F0 v6 f1 ^ v.erase(vector_iterator,v.end());
/ }& }1 a) H C* m7 T }
3 L7 ?, C8 W0 i) h return v;( n/ v# X2 _0 R/ X( {8 P* ?+ \
}6 l. K4 A2 z6 ~2 W V8 B7 \1 [
% H6 N* u* M1 W6 m//两个vector求交集0 I- `6 s5 g: p& D
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){, N9 P8 n4 J' A" T' Y( y* F
vector<int> v;
7 G# ?, Y- W; h5 q+ b% a sort(v1.begin(),v1.end());
" x% ]& v* ?! r* q" P* { sort(v2.begin(),v2.end()); 7 S# q! w) _) F3 L# }) a: u2 C \
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
$ f7 X7 s' m% z7 @ return v;0 p5 @3 Q) K/ M# Y, ]2 Q
}
0 d6 W: ]3 P# Z" a
* U8 M0 b6 p' d6 Z& R1 D- r, p; m//两个vector求并集
: {8 c7 ?" h4 b; l6 `vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
1 y, P* b: K' w vector<int> v;. v' @' o4 n( A/ L; ?/ {# m
sort(v1.begin(),v1.end()); 8 U: n9 Y3 g% J3 u" S- d. P
sort(v2.begin(),v2.end());
) \5 P- ~" E+ J. d, E+ v7 z* Y+ c set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ( i; L" O7 D: X5 A3 [! m* L+ ?
return v;2 ^7 k' }9 b a/ G- |+ T% }
}
4 I/ X; K' R2 y0 n : N8 i: U: ?# Y" }: q4 |
//判断vector的某一元素是否存在
- S8 H. {: K- q: ?5 @bool is_element_in_vector(vector<int> v,int element){
- n, i" X( x2 ], Q5 _! ? vector<int>::iterator it;. j0 v2 J) n3 r( |$ V2 ~; f3 ~
it=find(v.begin(),v.end(),element);
# K7 P. t2 I( J* A4 f& u( q if (it!=v.end()){ k- m* ~) k" H; v9 B. r) p
return true;
6 B9 s- ?# G) I; B" l& }3 @, k }' L, [0 U Q7 Z* q D9 v
else{' e* w5 u/ y0 ^+ W5 S
return false;
( L- P6 r$ B8 k9 o }
9 O3 ?- E- W" a( }5 L/ K9 n}
4 U6 c& j# O; K' G, z" e3 Y
: t. B! D5 |* `4 v7 dint main(){
2 H2 ~6 ~! W) F vector<int> v1,v2,v;
\7 B6 h0 V* I+ ` v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);5 ]0 p! \ ?, b
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;/ i; o W" i) Z# f% ]! u
cout<<"对v1去重:";+ K" K9 R# W3 v! |3 L
v1=unique_element_in_vector(v1);" y& ~! Z* Q3 L( R$ w
print_vector(v1);
$ [" D& L# C7 I& Q3 q# \* r cout<<endl;9 p0 s& E. S% D0 }
cout<<"求v1与v2的交集:";
( i1 }5 D. G7 m$ L& k& d; i v=vectors_intersection(v1,v2);
7 b! A8 a, T, @( Z' F; w print_vector(v);! ^/ i ]% x. v" t" _; \
cout<<endl;
5 u. P( ^ E( G- u. W3 d cout<<"求v1与v2的并集:";
- {- X: V5 r* q- v v=vectors_set_union(v1,v2);
. W. `) h/ N8 }: x' }1 Y) I# D+ m3 w print_vector(v);
, g0 b7 S" a7 u' r1 z( Y return 0;
3 p" @& a+ ?( w' e}[/mw_shl_code]
, R+ I, ]. O( w* ^$ ] |
|