|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
7 D0 }% N, ]3 z' ], g
4 r4 _1 }! c' Q$ U* ?C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
J# p) P" e6 O _2 K; |: r& {7 [, Q[mw_shl_code=cpp,true]#include "iostream"
! G" Q% c1 l/ M; E7 T' @#include "vector" 0 I1 ]+ k I8 g0 a
#include "algorithm" //sort函数、交并补函数
. q. v* V. d# C- s9 I1 D! s#include "iterator" //求交并补使用到的迭代器% O& `7 W& \- G% x* I5 k
using namespace std;0 n* @4 u' G( |& G0 x, r7 C2 X
1 \4 d% Y$ N0 b5 W4 U
//打印容器vector
, p. L. f! b( bvoid print_vector(vector<int> v){) h; k0 m, G" F- T4 u, J. u; Q
if(v.size()>0){
4 M1 b t( W/ l4 ? cout<<"{"; ' U( B1 K- ?: T x$ w8 b
for(int i=0;i<int(v.size());i++){ ; d" f9 N3 L* J, P" k
cout<<v<<",";
) ~- Z0 z* `4 _9 z, O5 H- i }
- r+ x7 `2 k- p/ b0 A9 i cout<<"\b}"; ! Q% p# U' G" K1 ?; Q4 X* ~
}, S. s( Q6 r) \0 [, z; s, H
else{2 a5 t' `5 O1 A2 m! B
cout<<"{}";
@9 Z5 r' @6 x- }: N/ L }7 e5 N R/ P! H6 b& ^ v# b6 Q
}# u# d/ y l2 _- ]# X) U2 O1 u
t1 C5 G; ]. }3 V& }//容器vector中元素的去重
' {! ?7 [4 O' dvector<int> unique_element_in_vector(vector<int> v){
9 o5 o4 P1 V& X4 E7 q" G% R vector<int>::iterator vector_iterator;/ S' S T, `) z5 ^3 `* x
sort(v.begin(),v.end());! x% j4 N. z. m3 _. Z. O; n! ^
vector_iterator = unique(v.begin(),v.end());
7 S8 j1 r; ~' ]! ^2 ~ D+ A: ^ if(vector_iterator != v.end()){0 M: w5 A! k' w( J1 b9 w
v.erase(vector_iterator,v.end());/ }8 c2 I$ A& a
}5 I) V+ K( \, F" \- L
return v;1 P9 o' `. e1 y4 @. u! q0 |
}
/ l- q2 A' Z5 G6 w! v 7 q3 a! T. t; n% q- O
//两个vector求交集
1 s& U' h9 i% |. Wvector<int> vectors_intersection(vector<int> v1,vector<int> v2){2 R' J5 T! r5 V3 s' b; Q- y
vector<int> v;
& @' G, E- `6 q E sort(v1.begin(),v1.end());
% r' R6 n! w, d5 e7 m sort(v2.begin(),v2.end());
% c3 `8 v+ @1 o, ]& m9 u) A' l$ }/ @ set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
+ c3 ]" C1 i5 Y return v;
! [' r, m' f5 f1 u2 E}5 q) c3 q! n$ H! U
( ?7 ?5 P/ M- k4 \//两个vector求并集
4 X" d( |. _7 \vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
% L7 R' s8 g0 o8 x. n5 A+ n vector<int> v;
9 J9 {- o% ^! l; X! @8 T sort(v1.begin(),v1.end()); ( W1 c; Y8 a8 W, W
sort(v2.begin(),v2.end());
/ H) D8 T2 x% b set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- l. f# L9 T- X$ P return v;
3 n- ~; {5 L6 w i3 j}
5 c$ Q, V" X! z6 U* s
u) G' b, ]: Q8 F# q//判断vector的某一元素是否存在
) r3 ^1 T4 h6 @" w# d& T2 Vbool is_element_in_vector(vector<int> v,int element){! n, g/ I% S4 w! ~1 c- n9 ]
vector<int>::iterator it;
) n3 q% p7 q9 Y) q$ M it=find(v.begin(),v.end(),element);
! f# @+ X- u+ z T4 F" ^' e' o if (it!=v.end()){
# t8 T: H- s3 k' L' U return true;
8 E- B9 t4 [3 c0 P2 d B* i1 I, h8 z }
5 U1 v) Z. [/ t+ Y else{
$ B) d4 f; S6 c return false;
Y2 R! g% R! Y3 L$ O }
4 e( K) \% s. M, _' Q+ Z}
2 i5 i& {0 \% p ' B" K( J; S1 z1 ?9 v; O( e
int main(){- x) s6 |9 N* k4 ], h3 ^% N
vector<int> v1,v2,v;
+ J% |% O0 b( C- r6 @ P v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
- r: Q! |5 O* h. O: u, h, T8 G cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
( q! u, U0 ]7 c! O/ K! W. i cout<<"对v1去重:";) z; j) v: S" t7 G/ J
v1=unique_element_in_vector(v1);
! c9 |, b3 j5 V2 m; c" L print_vector(v1);
7 S1 v6 y* G: K8 J8 F4 \ cout<<endl;; P* r# T! s$ f# T! ]3 R) m
cout<<"求v1与v2的交集:";% f& y+ o6 q( J6 z0 w' @
v=vectors_intersection(v1,v2);; s- M" F; u8 \1 g8 o. |
print_vector(v);1 b6 M+ j2 L# K2 N: i
cout<<endl;# H3 d9 `) V# w
cout<<"求v1与v2的并集:";
8 Y) K1 M8 j4 q v=vectors_set_union(v1,v2);- B# J* |1 v' L4 i4 K$ ^/ ]
print_vector(v);$ n2 @- O" I. T
return 0;# R: U* V6 y7 b/ m. [
}[/mw_shl_code]
! N: [) `6 P$ v5 W x; l# ^" E |
|