|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
+ q" h# Z8 `: A! ~1 L* d6 I4 T( [7 R) o" _$ o
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:$ i3 c( }/ j- G. y
[mw_shl_code=cpp,true]#include "iostream"
- N; M Y7 @9 I6 s# v8 D) v9 F#include "vector" / P1 C: n; v) a& n
#include "algorithm" //sort函数、交并补函数# G- X$ @) B7 k$ r" L1 Q; N+ u0 I
#include "iterator" //求交并补使用到的迭代器
+ W Z$ l( u4 }% W$ Uusing namespace std;
! ?: f! M4 E( _1 d6 s
$ K7 t t% H, ]4 {9 d; I% r) V8 Q//打印容器vector
; z* p( b* ~5 f a0 M. P7 N5 J3 tvoid print_vector(vector<int> v){
; u9 G& [- P! @ V4 t if(v.size()>0){
. L, R# T2 w* a' w0 j cout<<"{"; ) V( x9 t/ h* O' h2 I" Q" f: _
for(int i=0;i<int(v.size());i++){ ( e( B- S; ?. f* H$ X' n
cout<<v<<",";
7 |" O1 H* X2 _4 V }
! c1 g7 O! ?* G# N" g' g3 s cout<<"\b}";
5 _+ O5 ]( \8 _, b6 c( k2 F }( g& R8 i& c3 p
else{: j9 S4 H# @1 T
cout<<"{}";3 E3 g( h/ g9 o* u& s7 b s0 g0 D
}7 K0 j j& S; r% `
}
3 [; b& P+ u7 r8 ~4 | ' S9 w$ K& a9 K3 C- X# K8 z9 h
//容器vector中元素的去重+ }+ R; k& H8 ?+ E4 j, X0 f
vector<int> unique_element_in_vector(vector<int> v){
9 ?' Y3 w1 S* K. E5 f vector<int>::iterator vector_iterator;5 y3 J: Q- ]) u" b$ c' j
sort(v.begin(),v.end());# X+ ~( x3 P. _; H) s& |
vector_iterator = unique(v.begin(),v.end());
- l7 E2 J' _" p if(vector_iterator != v.end()){
# H4 x' a/ ~4 q v.erase(vector_iterator,v.end());
2 [! J1 Y) \2 l1 {7 }" o }
2 }2 p( B* {, C8 B1 y/ j& P return v;
) F2 [$ h `7 j}- w/ y' Y1 O) K
. B' |; {# O0 f( i% R* I
//两个vector求交集8 @! E& J2 q+ R! w+ v: C, W- t# ]
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){, L/ `* b+ p. R0 K8 T
vector<int> v;6 L0 Z+ z. C* Q4 k, q/ t
sort(v1.begin(),v1.end());
6 E" p* m3 k m3 g sort(v2.begin(),v2.end());
# @1 r2 i1 C; _" b9 B, e# H& o set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
5 H. O% z! ?2 [5 `& L8 x. W( Q return v;
: N/ y( j1 Q! _2 B4 M}
3 _! X W/ C$ I S
. F, e- r* L* a" v8 e3 }//两个vector求并集; Q5 s, D' C' b& _8 K
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
8 j% p0 `0 m( `9 x" |9 I, L/ f- s/ ? vector<int> v;6 ^. ?0 l8 c1 i& R( q R
sort(v1.begin(),v1.end());
+ W; U1 k1 `1 W4 q; X sort(v2.begin(),v2.end());
4 L( ~7 x! L2 G5 Z set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
& `+ n1 Q- i9 p' V" f7 L3 [* E return v;/ p$ g) ?# s0 s- y4 {; |1 l
}
8 M* k; P2 E7 V * R0 G6 f P$ o- `4 S v- P
//判断vector的某一元素是否存在
5 j- ~9 @! m9 |. Xbool is_element_in_vector(vector<int> v,int element){2 t( F7 R( m( B. m) t( _
vector<int>::iterator it;
. I' f5 ^) P1 h+ T) d) \2 S" b it=find(v.begin(),v.end(),element);. c% |2 g8 O( g
if (it!=v.end()){
- ]! s( O; D' v1 o) | return true;. E3 s& I% c2 i
}8 W4 `- l/ w8 |, E* s0 _
else{: Z ~1 \4 k1 d# C! C) H, V; P! ^
return false;" g. D+ {; {: O4 c6 W( ?& r
}
7 m/ M5 Y; I( D$ Q" R}
7 }6 l7 L! ] h* R 8 |; i& I+ N9 I$ d: f* V3 s
int main(){
9 e$ E- f7 `; m) U, G% f, g vector<int> v1,v2,v;' D4 @* c; ]0 O" N4 g
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);5 p! o" J0 m2 Y/ w5 l( Z* @$ m+ A4 o
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- p# H& \- p, P) l6 Y- ]' ~. L) g _
cout<<"对v1去重:";8 s e$ g4 s0 Y% H. i
v1=unique_element_in_vector(v1);
9 V3 h: I& C/ |8 e print_vector(v1);1 @! O/ t9 W$ `$ o* u
cout<<endl;
% h8 E7 L; k0 @, @4 M cout<<"求v1与v2的交集:";9 j% q- `+ H8 x4 Z
v=vectors_intersection(v1,v2);
# L5 J. s/ Q( ~, ^8 ? print_vector(v);3 ^8 U4 j4 o! z- e% L# K# V% D
cout<<endl;
3 p0 S' F7 I) t6 J cout<<"求v1与v2的并集:";
[! k+ Q( O" r4 d5 ^5 T* r v=vectors_set_union(v1,v2);* F$ b/ Z# }' h( o! m
print_vector(v);
) O# G) n0 J% @. K1 A return 0;2 F: \% g6 w$ K6 }5 p
}[/mw_shl_code]; w. _: f5 a, i( Y; ^+ w, e! z
|
|