|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
( Q' z; M8 @& C; s+ k5 F% ^5 ?+ j; s J) r
, `3 P) ?* O" i( m4 ~+ EC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:$ l# K& t' {* W- \. _; _6 K1 y% H# O
[mw_shl_code=cpp,true]#include "iostream": U+ N8 d# Z; m6 x8 m- a) P. Y
#include "vector" 9 V: I' k K4 [
#include "algorithm" //sort函数、交并补函数
& R! \5 J7 x/ K) f' b. i' q#include "iterator" //求交并补使用到的迭代器
8 D6 X* Q- H, I/ `using namespace std;
h& m& T, b; `) i9 g
% Y# \ G3 q1 D- J//打印容器vector& N. }3 z* [( E8 C" M0 h
void print_vector(vector<int> v){2 C, F6 ^ i6 W" A
if(v.size()>0){
& c. Y7 ^: x- `' q cout<<"{"; : Z& F. E' U. @7 V
for(int i=0;i<int(v.size());i++){
9 S! Q/ e* q N; c cout<<v<<",";
! n* K/ a5 D, @; o R9 r! c2 H }
! O6 D" Q6 Q+ g+ q+ X& Z cout<<"\b}"; * i; [& \- o/ C) E; B6 @
}( f1 Z# H- y& Q# v% l; x [
else{6 U, s( v* S+ Y9 L1 C1 a6 Z
cout<<"{}";
) g' \9 [3 ? m }8 \ m0 ^( R @; h; |2 s0 l' B
}6 y' y8 [1 S5 {! f) l# `' v
" c6 K* |/ _( R9 K+ M//容器vector中元素的去重7 ^: C+ v& c/ ]4 Z6 I
vector<int> unique_element_in_vector(vector<int> v){
% u, |2 q$ z# F0 j5 e4 m9 S vector<int>::iterator vector_iterator;
' r+ D- g* a p0 j" F sort(v.begin(),v.end());
, S g) p% ?3 _ vector_iterator = unique(v.begin(),v.end());
+ _. G1 O9 W0 u, ]: Q if(vector_iterator != v.end()){
9 E8 A$ V) {7 L& c, B6 [, u v.erase(vector_iterator,v.end());
. F+ N$ e* K! N f. } } F/ O9 t& ?% R' I1 K
return v;% H8 F6 I2 o+ `5 t7 J
}
+ M3 z7 G y) y2 n + B5 k7 c2 m- ^$ k
//两个vector求交集
& N8 W6 i2 O" U/ o9 mvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
1 k0 \$ {( P4 p0 W. V vector<int> v;
( A. {6 T2 R2 m$ B5 \ sort(v1.begin(),v1.end());
# M) q2 ^4 C: Y sort(v2.begin(),v2.end()); 5 i6 b9 ]% c$ C' O+ a
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 . J9 z% }, y; d
return v;
1 {4 D. H* ~1 \1 U5 s9 v; H}
% I5 q% O& q0 y
& p0 Y' |6 f6 F0 K//两个vector求并集4 B3 [$ o# c$ P& I4 d7 O5 F
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
+ t; ]2 }2 Q) P% |* s vector<int> v;* u; N3 N% W5 L0 X
sort(v1.begin(),v1.end()); " g6 F! t$ ^- t/ ?7 p* T- p6 E
sort(v2.begin(),v2.end());
3 H1 L* D4 p: U8 w2 {# v set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
' f' T! Z) m: ]5 t6 D* z return v;
# D. H5 [! }3 n+ J5 s" H( J}. J* Q2 e, w4 E2 D9 u) ]) L
) ?4 r* _2 ^/ i+ R1 g* @
//判断vector的某一元素是否存在% _3 Z( U( n A% B. {1 D: V/ v
bool is_element_in_vector(vector<int> v,int element){( B9 {! L" U; X6 Q- F, U* ~/ t6 |- F
vector<int>::iterator it;: c! w: h1 y/ |& n5 G
it=find(v.begin(),v.end(),element);
3 N7 d/ K0 Q# d8 i4 F if (it!=v.end()){
5 k/ y b' d# x* ], ?# j& v return true;
, V) y# v& r& Z+ q+ Z. w! i }" H, }6 O& j% J. {9 e% |
else{/ r' t, }. h" J; n% ?- A: x( c9 V
return false;
5 V9 O3 \/ X. }# U3 y }5 f0 M7 z, S9 m% y# m7 h
}# u8 g* H: M1 g; n- {1 T
' E$ j& v4 y8 ^7 Yint main(){ x- x, z( E: K& u _! C2 l/ g
vector<int> v1,v2,v;6 E; o D2 d; K) ^) Z
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);" j* S9 a3 R. Y( N$ o
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
1 O2 R7 L b4 H9 h+ A( U! |# Y cout<<"对v1去重:";+ p( k* t K/ M$ l5 R& Q+ b6 L, ]2 I
v1=unique_element_in_vector(v1);1 d8 C6 b8 Z9 H
print_vector(v1);4 q5 U6 w4 X h8 G' @) ~
cout<<endl;
; ^0 Q$ q# G/ T6 w cout<<"求v1与v2的交集:";
4 K j" b5 a2 S2 Y! | v=vectors_intersection(v1,v2);
2 Z1 p: G: ?* y c) m2 \ print_vector(v);- m1 x8 a8 T+ I
cout<<endl;
; Y8 W( M G8 {/ b cout<<"求v1与v2的并集:";
+ `8 q" y9 `0 N1 `& @1 s' `; v v=vectors_set_union(v1,v2);
( u) o+ t3 g$ M0 }& V print_vector(v);
) G$ r% p* q) k return 0;
: P+ g2 U: v I7 J3 Y* O) Y, S}[/mw_shl_code]
9 ~2 V7 R( Y+ N+ A |
|