|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
8 C& o n- r; j
: C8 G3 ~; [1 {8 d, }9 nC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:0 }0 X# V6 E! B5 ]- O7 B' O+ z
[mw_shl_code=cpp,true]#include "iostream"8 u2 R" c$ t$ d! h- a
#include "vector"
8 j3 Z: W/ o3 c5 `( y#include "algorithm" //sort函数、交并补函数
/ V1 D6 q a7 T" ^3 i3 @#include "iterator" //求交并补使用到的迭代器
: S$ T+ ]& h' ousing namespace std;6 b3 y- E }! U& x7 h
! J+ v* `6 [3 \$ r; D1 i
//打印容器vector v' C7 v2 z9 x0 U6 |: l' _" |
void print_vector(vector<int> v){
4 M# \4 p! t" K" M4 d! N. C if(v.size()>0){
! F; n$ P/ c! z; T1 H* ^ cout<<"{";
6 c. N4 |" F _1 J$ b, N for(int i=0;i<int(v.size());i++){
+ Q' W$ k) D4 c, O cout<<v<<","; 1 F' p) D& a K4 S- g3 g
} ; E1 Y' G+ Y6 K5 c
cout<<"\b}"; - X" S' E9 b0 P/ ?) l; s8 }
}
) k( H1 |; {4 c! o% Z4 D0 S else{8 z+ K! e2 a, i; _- Z9 @- ~$ X
cout<<"{}"; t- G: \+ |8 a9 p. P
}
" J; {7 Q7 i0 b, n% @/ B: E5 U/ u/ p}
% L: G* U$ R d- A! O4 |2 K . U E4 L9 {* w! p% A: I, q7 V3 V
//容器vector中元素的去重
% `/ v5 L: Q, Y, f0 M' C4 Kvector<int> unique_element_in_vector(vector<int> v){4 g6 O% P" U8 l; J
vector<int>::iterator vector_iterator;
; _$ R% A9 x. [, c' V( t: K sort(v.begin(),v.end());
2 {2 j1 j5 G9 P8 } vector_iterator = unique(v.begin(),v.end());$ d. m2 F' ]' Q+ @; f0 \# H
if(vector_iterator != v.end()){
# u* Q" C9 Z7 r- ?" v" w9 y v.erase(vector_iterator,v.end());9 d6 F. e6 `( b
}# d" m3 H3 W4 }9 r9 j+ p
return v;- M @% d. i$ }0 T7 K
}
" s- G0 R" O' e( n" C1 T N
' C0 [, r- F6 l+ U# w/ Q//两个vector求交集. }4 ] i- O! x0 B* X2 l+ y$ t! U, ]
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
0 v0 O; x: D* Z1 y: k, [4 A0 W8 m vector<int> v;) ~8 n6 _- u7 i
sort(v1.begin(),v1.end()); * u0 I4 w" g! x) w/ r
sort(v2.begin(),v2.end()); 6 s0 h( Q( y9 l: M1 i* F( t
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) F3 i/ E6 k0 |( K return v;& m0 l# d. W5 B* M- r$ w
}
/ n' B Q! ~# G' F+ _& C / W8 I( s3 O- Z6 ]' C% D `, i
//两个vector求并集" a- a; l* x* |5 x( e2 _( B
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){/ f, A! M a6 R2 o5 a2 K; K% E
vector<int> v;- C ]( }: y2 V/ e
sort(v1.begin(),v1.end());
& u8 T8 R. s$ K# f X8 @8 U sort(v2.begin(),v2.end());
8 ~8 I @5 w4 D9 j7 i set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 / ?5 r+ D" l! L6 `. ]- c
return v;
; g5 u+ L) y2 U4 d}
5 h7 X7 B8 h2 z4 m) o9 |! \7 n
* |% v# S3 M+ ^4 [//判断vector的某一元素是否存在
! A/ J. K1 q# Z! fbool is_element_in_vector(vector<int> v,int element){
* A4 U( V5 d$ x7 O vector<int>::iterator it;
% J7 X! X/ u% _5 t$ Q. l; H& r it=find(v.begin(),v.end(),element);
7 _+ F; c" w2 V9 o/ H- Z4 I4 ] if (it!=v.end()){# a( k- y' j/ c9 |2 \
return true;
4 w5 \7 z8 R+ g. v# V }
; K& H1 v# x. {1 y, ] else{
- y. {- Q/ u: C8 ~ return false;' L5 T" y$ Z' ?. q/ x+ ~
}: D) \% l( X/ h0 O* H
}. v2 d: @6 B% L k; i8 p
# X! ~4 i5 \9 |+ \! zint main(){
- d8 D5 {5 c7 T5 _) D. n; [ vector<int> v1,v2,v;6 p9 m$ B1 R5 ?/ {) l
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
1 n/ j( Y$ o( W" Y. | cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
+ {: W6 Q, h, b- [5 ^ cout<<"对v1去重:";
3 }7 ]0 L. u! L3 l v1=unique_element_in_vector(v1);# O T w; q! R) j- Q( ^- Q% y
print_vector(v1);
! ?/ e% l5 a. p1 l. M cout<<endl;
J! m" s. P7 y7 f- U3 Z6 E. U cout<<"求v1与v2的交集:";
# H, [4 S. m: B& Z, h0 c( c' i v=vectors_intersection(v1,v2);
( U+ S4 y4 N& B1 h1 z6 d9 p8 s print_vector(v);7 V1 k! `, S( M6 ^8 @) C
cout<<endl; R C: i7 z* @- d
cout<<"求v1与v2的并集:";
% n0 {5 b$ ]# g0 ] m v=vectors_set_union(v1,v2);% z) n/ S3 A& z; b3 V2 ]9 `0 p; X
print_vector(v);. ]3 \- B2 k/ `1 |
return 0;- n# \, I% y g) h- O# a% ]0 j
}[/mw_shl_code]+ A5 n D |% N4 c U# r" a
|
|