|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
C- L1 P$ ?' g0 y5 r+ \0 h3 i1 C& l
# r9 f1 c, i2 e, f" e9 A( P" {0 @4 ?
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:, I5 F1 O t$ ~' D# S
[mw_shl_code=cpp,true]#include "iostream"* ^# T" R# r: F( N. A' ^, U
#include "vector" 4 z0 ~5 C* H# d4 \4 Y( i! C
#include "algorithm" //sort函数、交并补函数
5 X7 h9 R" u9 z8 v# k$ @5 p5 t#include "iterator" //求交并补使用到的迭代器% S9 W G8 Q9 @* x
using namespace std;. t9 t0 d3 `. Q
8 t, \$ A7 C* s( d) ~
//打印容器vector
+ A) L1 \: T) e, c8 O( t6 H2 b2 _+ hvoid print_vector(vector<int> v){
# L! T/ a! z! [4 B" {; O if(v.size()>0){
9 M9 L* V! D4 p cout<<"{"; ; ^: q- U4 m/ J. T2 l
for(int i=0;i<int(v.size());i++){ 1 K0 Q& T# L8 V& u
cout<<v<<",";
- i% B: I% n9 p$ ~( [4 ~' I }
! l$ j. k% n6 A/ G' [, {( n/ c cout<<"\b}";
4 i1 _7 E' m; w" T$ E }7 n3 G' Z- e+ o# U& h v/ k7 K
else{
) B' M# y* t5 m1 a5 e cout<<"{}";
6 U) o: \! V- H } G+ y% X/ B1 ^
}4 T* {" |% |8 X% {2 I! D
* Z- X# C6 ?- j; B! Q
//容器vector中元素的去重- w5 f' a, ?6 |4 I
vector<int> unique_element_in_vector(vector<int> v){ b2 b9 {; b0 G3 H+ W
vector<int>::iterator vector_iterator;
# u' g( X! r9 ~: k* q; s. L sort(v.begin(),v.end());
/ {( c4 ~1 }5 \! F vector_iterator = unique(v.begin(),v.end());; O3 H0 [4 N. u9 w& Z
if(vector_iterator != v.end()){5 w' j+ A% o* u' j. S
v.erase(vector_iterator,v.end());/ S- S+ ]' t1 T H* j7 j
}% k2 M! ]6 j: O
return v;% ]( e" p4 ~5 e4 K' W% x; }
}& c( D3 M4 o+ A1 | I
' G% R& X( s, [# F* O//两个vector求交集' v9 y4 s% Y9 J9 @# T) E2 k {+ g
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
. T7 C5 G$ ^ E% i1 x vector<int> v;* w1 ]% {+ j+ L7 j% |: b2 I
sort(v1.begin(),v1.end());
6 D$ v3 ~7 f& J( f- K sort(v2.begin(),v2.end()); & q" O3 G6 q9 l* P
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 : o) Z: w, [( I8 b3 y, {' N
return v;
; K( @* W- }) L; N1 q1 k! D}0 P$ {% o) \4 L o5 _& A
8 `5 R3 e/ D$ W. z6 S8 l. I( B1 F//两个vector求并集
9 O$ `$ c, A x, X K5 Uvector<int> vectors_set_union(vector<int> v1,vector<int> v2){8 q6 V! E" _; ^6 N# N0 ~- N
vector<int> v;
2 t0 ~5 D5 e2 @% D0 W sort(v1.begin(),v1.end()); & u0 V' e, t6 r4 I% G) C
sort(v2.begin(),v2.end()); + f( U) A' j. {4 k' I
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
, |4 v. U9 o5 W& \ return v;
+ f* D9 M) q7 x3 t}
8 `0 ?* s; J3 Y+ Z2 S * i) K7 t! A+ L+ u# l
//判断vector的某一元素是否存在
: d4 c: z' ]! J9 }/ o$ L- dbool is_element_in_vector(vector<int> v,int element){
) G; U w Q; u) } vector<int>::iterator it;
) c7 l& W$ L9 c. {9 S) J ? it=find(v.begin(),v.end(),element);
' M6 y4 a3 B6 x if (it!=v.end()){' A5 E5 G8 T1 p J4 @* e
return true;
+ p2 t' u2 h# s r, c: E1 z9 T, w }3 Y ?* M4 ^6 s5 i( ^ z$ P
else{
5 h3 b/ i+ h9 m3 V/ w3 A return false;/ \' f* ~8 v2 K$ B2 }0 z
}
+ j" g8 M1 V$ {3 j# \+ _. B}
+ U$ d c2 a7 `0 O . H2 r' r. A7 i i R; J& C
int main(){
0 T5 N5 I8 E/ R5 N2 H' ?7 }- ` vector<int> v1,v2,v; f% z1 h J' j! |6 l! i3 D w
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
& s z4 }+ [6 n7 N cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
1 C4 v3 u& {: c+ u. J+ D5 ]# A* Y cout<<"对v1去重:";! E6 C2 @$ ?# k) b
v1=unique_element_in_vector(v1);/ ?3 {) C- J3 H5 z
print_vector(v1);
$ l' s0 H ]3 {, E cout<<endl;
. |/ w c8 o2 X# y cout<<"求v1与v2的交集:";. k7 z) O$ t. M }% y. P- d e
v=vectors_intersection(v1,v2);
& F9 X @6 x/ D print_vector(v);8 Z! j1 l; w0 {& P, P
cout<<endl;$ i5 r3 D: J8 N" g
cout<<"求v1与v2的并集:";
9 T# Z. q l( b0 }' G' J$ V v=vectors_set_union(v1,v2);
* r9 S+ X4 w* c7 C! o& K, I2 `6 A! U$ S% C print_vector(v);( f6 ~) ]& Y) \3 D
return 0;
9 ~6 Q! W9 G6 m9 H$ `& c# C. M}[/mw_shl_code]
* j1 p& S" z/ ^* L |
|