|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
* Y' X! k0 r0 L) | ?. A, }5 [1 c
( z6 N9 [2 v) ~; ?( }' d' l- w* u- d
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
. V) T' n0 t: |[mw_shl_code=cpp,true]#include "iostream"
; u1 w, g9 v$ n( v f) w6 h+ F#include "vector" , a. c* A; g$ S, G4 y: q* ~* u$ f* p
#include "algorithm" //sort函数、交并补函数
; O# c+ J- J1 r1 j1 e& T#include "iterator" //求交并补使用到的迭代器" R j4 I& {( V; J6 z: d9 D
using namespace std;
4 N, x% |9 u# L h0 ^! Q# s
" Z3 G! W* h: b5 [) L; J+ n//打印容器vector
* I; ` H ~/ z6 b. _void print_vector(vector<int> v){
8 Y7 L( `( C& J6 m1 p if(v.size()>0){9 N4 w+ x6 e: g1 u% I
cout<<"{";
9 p% r* s$ z3 c% P& l for(int i=0;i<int(v.size());i++){ Y$ ~4 n; ?! P, E
cout<<v<<",";
' K1 `$ U! [' u. C6 P }
7 w" ^! e& H: W" h0 z cout<<"\b}"; 5 p# p# y" w6 q# L
}
; ]' j% m/ @! c5 I# j else{
+ ], a2 [; |" v- j+ s' ]- k& q cout<<"{}";3 B: i/ A$ `: t' x) `* g
}/ Y& S: j4 C( T) t
}
+ a6 z2 }0 j+ m% o" w
; e, U W# W; l0 a7 g. s' V$ @//容器vector中元素的去重5 U# T5 x1 b& ^3 i$ S
vector<int> unique_element_in_vector(vector<int> v){* C6 Y5 W# n; R/ X& w7 _* x3 O
vector<int>::iterator vector_iterator;* J# @2 }3 C# _
sort(v.begin(),v.end());
0 j' L5 a6 a! \3 X vector_iterator = unique(v.begin(),v.end());7 ~& Y1 ?: R7 `! R3 n2 U
if(vector_iterator != v.end()){0 k/ T# n; V( h+ F- u
v.erase(vector_iterator,v.end());5 t5 K& t6 M/ a( ^% q* i5 ]# T! `
}/ f* M2 N6 y4 a& o7 c) e( p0 i* `
return v;
- f5 |, R. \/ v* f$ j}
1 l+ x) M! i; U+ } 3 R0 U; [2 V1 D! J
//两个vector求交集. V# C+ O$ u5 Z3 G/ b
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
1 y6 K6 x1 [, w vector<int> v;& q8 T5 m/ |1 V& \. C
sort(v1.begin(),v1.end()); 4 G. h# x' @3 U+ u# h4 C7 O
sort(v2.begin(),v2.end());
; L) I( [6 U" w( r$ j R set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
3 a, x' `# D( w9 _* l6 S return v;3 h- @- b' I8 C4 K( V, C7 j F
}
% J9 P1 n5 l+ \
, V& L! N4 u/ L8 j0 P- u//两个vector求并集
( X' S& O: Y, X, m3 _- i Gvector<int> vectors_set_union(vector<int> v1,vector<int> v2){$ n0 g3 s' a8 w! ]% `, Z0 e
vector<int> v;
- Q! F+ F! q3 n4 G1 P sort(v1.begin(),v1.end()); ) w; e3 n" E# H. P3 T
sort(v2.begin(),v2.end()); + k6 h, b2 i- a7 r
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 S/ N$ g2 t5 j$ j2 l% x) K% p7 o; z
return v;3 v8 E& K$ q9 e0 B
}6 J+ i: j* ~5 F+ V' S& m- ~* y8 E
1 U$ A1 ~, a9 w5 D
//判断vector的某一元素是否存在3 {7 T% K5 o8 q2 h4 U/ T+ A
bool is_element_in_vector(vector<int> v,int element){
) o+ V- Q. r# t" x% d( \ vector<int>::iterator it;. r2 j$ T7 ^# Q. Q: m
it=find(v.begin(),v.end(),element);1 e% I* j# c! q9 z1 M' y
if (it!=v.end()){( i- C X0 e; F* c Y
return true;
5 f0 t! G+ M* T: S |! e* k3 \ }, a7 k) V$ k8 @) I
else{+ t: T8 w1 m' _$ Z/ a
return false;5 R# [- Q7 ^* u: A: u6 N; u
}( C E. S9 X' e* m) t. Q* T4 ?- j7 [
}; g( F, j1 W& N! d6 X ]& w3 |
" z! W7 q$ m9 v: n3 ~( [& T
int main(){' w. |9 C' _) g4 H
vector<int> v1,v2,v;2 O) }; _3 `+ K3 _$ W6 I8 v: w) o( h
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
: O( j$ T" G. P. m( \! v$ O- t, s$ l9 P cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;) m1 {- B8 a. l" l; e2 t; i
cout<<"对v1去重:";
7 i7 U! i: r; q$ d& x4 A' o/ ~ a9 Y' d v1=unique_element_in_vector(v1);
. {$ z) r0 K8 j/ Y" P$ ~ print_vector(v1);
# G* J4 |: y0 t: R$ y$ f) c! \' F cout<<endl;
9 `$ Y5 T+ D1 T; { c- A8 ]( D( E ~ cout<<"求v1与v2的交集:";
7 K; I1 D8 F9 p! E* v v=vectors_intersection(v1,v2);# F/ k# _$ p! r& k
print_vector(v);1 {, h* Z* c& ?1 g8 {
cout<<endl;
- k5 P' a, s) V0 o5 u cout<<"求v1与v2的并集:";. I! K* @9 t; @+ Q! d
v=vectors_set_union(v1,v2);, V3 R) R( w: E$ V2 D: N
print_vector(v);4 K% x0 ]5 k: @1 g, n S
return 0;$ L' X6 R h6 G$ i0 P3 N P% _# n
}[/mw_shl_code]
) ]' O9 m6 S7 {2 e1 ~ |
|