|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% L6 w9 S6 F* {: h6 { @" x
4 \; p) [9 A. S" g. ~C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
( N+ q9 [+ l' \, o6 G* p9 `" w[mw_shl_code=cpp,true]#include "iostream") u+ z1 _1 k! b5 \7 ]; x* e
#include "vector" 9 j. L2 @/ } ]2 B/ n
#include "algorithm" //sort函数、交并补函数
, U! I, d: p V7 s3 R7 ^" }! G#include "iterator" //求交并补使用到的迭代器
( n0 l' D! g8 f+ v3 @using namespace std;. ~, h9 p! @1 g0 Y
9 G5 Q8 z6 L+ R8 r1 h" k X+ g//打印容器vector
. X& X8 e0 X9 l4 P) rvoid print_vector(vector<int> v){
+ y. d; D' M' D5 U$ E9 T if(v.size()>0){
" m" l5 K/ g x: U) `5 O# S cout<<"{";
( R) I4 G& k' \/ U8 L for(int i=0;i<int(v.size());i++){ - h- _' i# H3 h1 b a) o
cout<<v<<","; . t' X1 I! n% A3 c! F+ r
} 3 m4 P9 F, l+ t2 h3 z; J2 ^
cout<<"\b}";
% [) ?7 @, i) X; A; y2 J }" j2 }2 m! u$ k' {3 p) R
else{
7 {8 N/ K+ O+ I cout<<"{}";
; f- m$ h# _6 j% b& O' T }
8 P* }. X0 c. v: ~; v5 m}
: L/ g2 j3 B) k! K
8 R- t3 A2 s1 H1 H m: r# ^; R//容器vector中元素的去重
4 F* |3 S6 h( kvector<int> unique_element_in_vector(vector<int> v){; i% a, m- I) F1 z3 A/ y) T
vector<int>::iterator vector_iterator;
( Y$ t/ c: O* T* e/ l sort(v.begin(),v.end());
/ F# r- ]4 U* t% f$ |0 O, C' P7 x& { vector_iterator = unique(v.begin(),v.end());
; x' m. r) S: N: t/ r4 i9 t+ \ t if(vector_iterator != v.end()){' Q$ H1 n9 _9 h9 S) V9 I
v.erase(vector_iterator,v.end());
& i1 X, K6 ]9 J& n% T. N' ^& d }8 F, ]6 t3 L# ]# V/ N
return v;
- E) i8 f# b w$ i* g8 K9 M$ }}
( [1 U0 B8 Y/ c% u/ Z% q+ z$ C2 z3 M+ x 5 k7 ?( f0 X ]3 M" o1 S
//两个vector求交集
i: U6 C: x9 u9 s# d3 h8 rvector<int> vectors_intersection(vector<int> v1,vector<int> v2){7 d, e1 U9 x; O" T# F9 M* s
vector<int> v; L- N$ [; A( l+ y& T) }
sort(v1.begin(),v1.end()); * \! R J! Z% M( ]- U8 s" z
sort(v2.begin(),v2.end()); ) N2 W. \" c/ A# X" Y
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
, L3 G) S0 }0 @6 g, g return v;
6 a* u3 h2 i6 A( ^& ]+ N% G}
5 @* S% g4 H/ b+ F P/ p
) v0 A1 J+ l i2 S# t* G//两个vector求并集
b" D. W- H2 K; ~! @: vvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
" v* h6 X' s$ A# f* R: p vector<int> v;+ Z0 L8 }% h7 K5 F9 [3 T
sort(v1.begin(),v1.end()); . Q, |# @% T- U" @ n7 m
sort(v2.begin(),v2.end());
& e' a- K" L. {- n6 N* g set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
% N0 q$ `0 ?7 k+ M: q6 K return v;
4 B' E7 @/ ^: u}0 {1 n- a9 w) _# X3 g& E
3 W: y! S; {- I: C* c
//判断vector的某一元素是否存在3 q* E( n! u* b0 y- F$ s! q. F
bool is_element_in_vector(vector<int> v,int element){
C; O" j( y2 h: M' g) F( Q/ {) N" @5 W vector<int>::iterator it;5 q; T5 S, F6 S0 W
it=find(v.begin(),v.end(),element);4 q6 \! P8 H0 e4 K
if (it!=v.end()){. ]1 y8 [2 K0 c
return true;' t( B- M! {7 A6 f
}/ j" \" c, v6 V; |) X
else{
# ~, j* a- k7 u/ }& q' b" c! p$ V return false;# p, f: S1 t8 y; F( ] `; @
}8 d* E1 c: T9 S% W# b3 B3 c
}5 a8 r2 k7 `) m. `
; F: B. R( C- l* u2 Yint main(){. p* a3 O* c3 h: V( i1 z
vector<int> v1,v2,v;) K1 p5 {: o3 h" w
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);: {8 c- M0 d/ C6 `0 B
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;+ c# D: ~/ X- D6 ^
cout<<"对v1去重:"; x2 L- |+ n$ g. {
v1=unique_element_in_vector(v1);
& A2 \1 u( R# [8 U) y$ J1 D print_vector(v1);
& r; l& p4 g0 {9 @. i cout<<endl;
2 L" _/ I1 O! j: _, j9 V% Z cout<<"求v1与v2的交集:";! y" l; i& f" V k, u" {. n
v=vectors_intersection(v1,v2);
3 u: ?* p7 H) |5 ^" U9 y0 D print_vector(v);
7 K. t+ L T% l V: U6 B" K3 ^2 ` cout<<endl;
1 \2 ]5 S7 B* z cout<<"求v1与v2的并集:";' o3 ^, @4 W. B7 Z& I9 G
v=vectors_set_union(v1,v2);/ {/ T) m4 _% L" P
print_vector(v);
" e- Z: l5 u7 I+ K8 k( {- [, Y return 0;! i" x/ ^9 B3 K6 O: O. t
}[/mw_shl_code]/ u& s' ~$ h0 c- S, b
|
|