|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
0 T1 ^7 j; o& q& O
9 d# \ d4 O0 L: P0 O% z7 ` Q
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:' P0 R, w4 |( N# P$ j
[mw_shl_code=cpp,true]#include "iostream"$ |; r9 A r8 \% P( s: t( @. m
#include "vector" 0 R( Y( g. [. Q- g2 a/ t, ^
#include "algorithm" //sort函数、交并补函数+ Y+ ?! `6 @, g* s( O% Q
#include "iterator" //求交并补使用到的迭代器
7 W# T! q, N5 `7 v* susing namespace std;' `0 s1 B! [! {2 s
& m# H# C" m* d! R/ x( m! B8 ]
//打印容器vector) w6 a: H# r& w' a, I, u
void print_vector(vector<int> v){
: ~" w/ ~% v3 B! ? if(v.size()>0){
! f+ x5 N# m* V; e, O cout<<"{"; . j/ s; O q% N9 d9 h& ~
for(int i=0;i<int(v.size());i++){
. q2 L n& Y( V! }2 W8 q# C. p cout<<v<<","; 0 Q0 l2 s; Q: W+ \, T
} N# ~0 q2 t# q+ ^! ?) J
cout<<"\b}";
7 A& i5 b9 Z) i5 j d# A8 ?9 P6 \ }- Y4 s ^% e# Y$ P6 O' [7 A3 {7 t
else{" ^4 E5 H/ [ b, F! ?
cout<<"{}";
4 ^) o8 T( P& R) [ }
7 T8 V9 P9 K1 i2 k w$ v0 L}
0 ]: F4 t; k* v+ K
1 ?5 O8 A! h0 m* ?6 a; X$ k//容器vector中元素的去重
" e( e7 ?% h& v& cvector<int> unique_element_in_vector(vector<int> v){
2 j6 I* x! }+ H vector<int>::iterator vector_iterator;
( U( O0 S( ^6 {' x, \ sort(v.begin(),v.end());
; C& r+ q% _' d5 I2 R vector_iterator = unique(v.begin(),v.end());
9 P8 U* Q9 Z. u if(vector_iterator != v.end()){
) \2 Q( q1 K$ q+ J7 \8 L6 T; ~ v.erase(vector_iterator,v.end());
, E" g x+ L( c }
+ W4 Y/ x! F2 f return v;. {1 c# {8 q _
}6 `; D" F" l4 ^& l: m
9 B7 |1 I) F8 g9 L//两个vector求交集2 x7 M' z) M) e8 X. k5 N; L
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){+ `+ W6 X7 {* Z& h9 x, u0 S2 ~+ j
vector<int> v;- z* _9 L: m. ?8 [( i
sort(v1.begin(),v1.end()); . a7 `/ p9 ]6 G* m% V
sort(v2.begin(),v2.end()); $ h7 O" C4 }1 ^# A2 W9 a {
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
2 Y+ P) g% a% } return v;
2 }1 [( E' M, b$ \% {5 z- y6 n}
1 E; s) {; Z, p/ b) F# h! v z
! i4 c2 T8 K8 Z; }( K//两个vector求并集7 c$ d1 {9 ?8 \# r% a) ^$ {
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){# S1 g( x$ L& B3 L
vector<int> v;
3 F7 ~* _2 N! o: y sort(v1.begin(),v1.end());
- N3 ]9 r+ R/ K* P% T* L# R sort(v2.begin(),v2.end());
/ D& D: {2 r( d6 ?0 g% O1 J* p+ w set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- G6 E3 b& u1 n$ u* V+ v8 a1 X) t return v; {$ m& t) x, @
}. b3 F {' |( C6 `
* O5 R8 g# n; }7 S+ `7 B$ Z6 C/ m& d//判断vector的某一元素是否存在& M, S/ J6 u2 g2 j( G/ Y) U
bool is_element_in_vector(vector<int> v,int element){
2 |" e2 w0 w% G; P1 k& Z vector<int>::iterator it;
% D$ y' x6 ]; \8 } it=find(v.begin(),v.end(),element);+ E* s3 R& C' F: \$ a
if (it!=v.end()){
c1 `; J7 m, `7 q0 Z; Q$ ? return true;
k$ L- Q3 g4 J }
5 g1 P0 n2 p- B% u9 m5 h$ W else{
3 q! L1 F$ h; Q- h& f* O; j return false;. Z. Q8 ]2 A" t; X$ V5 j$ A3 U
}) T/ L# _- h: `5 E* W Z/ g8 W: s
}" k3 N& E; y, _8 |+ b' a" s
! D( d# W/ r3 R1 C
int main(){) X8 B% P2 G, }+ h- W' W
vector<int> v1,v2,v; N7 j5 U& C+ \1 |# M
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);4 b* A" j! A H( f
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;, C- Z4 ]8 m9 c8 I. Z- W0 K
cout<<"对v1去重:";) ^' Y5 D7 L6 r0 ^4 R0 u1 Q
v1=unique_element_in_vector(v1);$ X0 C: w! X( R
print_vector(v1);, H1 M7 O$ m2 s. V4 P3 Q
cout<<endl;
8 p- Q7 i5 d4 ` cout<<"求v1与v2的交集:";
9 `2 q8 f2 N# z2 r3 W J v=vectors_intersection(v1,v2);
6 F, Q1 x0 Z4 M3 w A! T( \ print_vector(v);
* ^' Z" j! ?+ J2 h% F3 E6 {" ~ cout<<endl;/ \# K. k8 X- s
cout<<"求v1与v2的并集:";
7 E; x. O1 ~- P' {2 a v=vectors_set_union(v1,v2);
3 W% `7 |, j5 O0 u8 b. @' {/ n print_vector(v);) q- f" g* r2 q+ G
return 0;
5 b6 O9 [; C8 ?1 k( j7 w}[/mw_shl_code]" Y9 C7 D, t. N
|
|