|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 F$ ^% f7 R9 m6 h) E B3 h
" X" e" [: \: o7 L. R
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:' ?/ L; J( z& X- p
[mw_shl_code=cpp,true]#include "iostream") E8 r! c' I2 j4 \! M2 N0 W
#include "vector"
Y5 T( C9 L& G8 x( ~* A" w4 t$ Z8 J#include "algorithm" //sort函数、交并补函数7 e0 c; g' j, u
#include "iterator" //求交并补使用到的迭代器
! n6 m4 ^' q+ m" Y) husing namespace std;+ ]% f% T3 G" |
. i q( x. n; ?
//打印容器vector
8 o( |$ X% ~' D; M) W v; kvoid print_vector(vector<int> v){
% a, s4 b) N' a4 D! }+ n$ L6 c if(v.size()>0){
, L& {9 e1 u6 d! E cout<<"{";
. a, Y2 Z7 Q; F for(int i=0;i<int(v.size());i++){ - n/ @0 K' m% O1 e# M" l' B
cout<<v<<",";
% J3 z+ U0 l9 i5 l, T( @( S }
6 f9 C4 B4 }# J cout<<"\b}"; / x `% R R7 U( I' T, q
}
5 c6 t* N$ [ ^/ m else{
' [- B- q0 t8 p0 ^1 w cout<<"{}";
9 ^, H, y8 @0 o& |- [$ ?- ~" i }
0 g$ Q0 q& p5 {! Z/ M: y N}
1 \2 ?/ c# d. e' d" `( k b) p' ]0 m) f
//容器vector中元素的去重
' c- K3 @7 g. h& O. l/ Pvector<int> unique_element_in_vector(vector<int> v){# N' w: Q! n! w1 e' R; |" n- k
vector<int>::iterator vector_iterator;
5 d4 q6 r9 w& x sort(v.begin(),v.end());
3 c9 j6 U3 @: K9 Q vector_iterator = unique(v.begin(),v.end());& S; U6 [, H( Z4 @. _5 @$ q
if(vector_iterator != v.end()){
+ b/ {7 a3 e' Q( ]6 A v.erase(vector_iterator,v.end());3 m' h) w; \6 S# x6 A* G7 b
}- l+ {: n4 ]' Z3 C+ E
return v;
0 j& S5 J2 e6 Z+ C) O( I, S}
. [- F# g- {3 \: u2 ]( @: _6 ^ ( g5 V+ V% r% j" \
//两个vector求交集
/ a! N; Y7 G) o! c# e) \vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
; f9 L6 e2 ^1 Z7 [* t vector<int> v;9 b) f7 E" o1 c% v* T/ y
sort(v1.begin(),v1.end()); + i% w" d3 F k
sort(v2.begin(),v2.end());
' ?; \8 m% |5 m* ~% \ set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
7 P1 g- }( T0 W. x! Y# U- u/ [ return v;
* F: {) a0 l9 b) a3 B9 d0 S}
+ d5 ^8 g1 p6 G , h+ A8 n: ~* g9 F/ O, i
//两个vector求并集3 Z: i f8 W$ F% T# ]& H1 o* |4 {
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
% f- J- ~( r3 M" r, K8 Y vector<int> v;) R+ e0 q0 S* A* C" R# u" m
sort(v1.begin(),v1.end()); / l* W p: f1 I5 f
sort(v2.begin(),v2.end()); 1 j" S- V# N% X
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
3 L0 ~7 ^% I5 h$ w8 d return v;. R+ V H; b8 a( `
}
7 ^8 q- S! P) P2 i8 l$ C' a$ q
, ]" x9 s6 g4 g6 m C! `2 n0 i- b//判断vector的某一元素是否存在
x& ~- s7 V. V0 Q( ^bool is_element_in_vector(vector<int> v,int element){
7 o8 A: T2 N* Q: Q vector<int>::iterator it;' }' ]0 D! m5 I3 {
it=find(v.begin(),v.end(),element);3 O& b4 d9 _1 s" A( ]# Y
if (it!=v.end()){, A: H3 w1 e9 G# c
return true;
& |" G& P( |3 d. i }
4 U& W5 k( Q% o' P/ X else{4 ~5 t! i$ t) H7 H
return false;
; K8 A! }4 x1 I" ~ }' K/ y4 V4 P# \$ ^" ^
}
. D! C! A4 F9 L1 a
7 J" r ^# E7 C/ S: B8 ?int main(){
- `3 c6 s; @: L4 I; O E vector<int> v1,v2,v;
. E5 D3 q2 ^& P( A* I3 A# K v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);, e% ? N+ |) a
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;5 m# z3 w2 r: R1 ^5 w/ V8 v6 p
cout<<"对v1去重:";
$ T" i0 ~6 P+ t% Q& R4 o% U! L v1=unique_element_in_vector(v1);7 R! t) a4 o: G" p' Z& l9 @1 o9 E
print_vector(v1);2 x2 w: o8 R, j: {6 d
cout<<endl;
: M# S0 \' {+ A: L2 r, Q cout<<"求v1与v2的交集:";
3 h: ^. j/ p* l8 [" F, z- Q v=vectors_intersection(v1,v2);
+ y2 Q l% q3 l, Q* R# r* _4 j print_vector(v);
$ U$ M( E: H8 W& v. y3 U2 i7 `! M cout<<endl;3 j+ m7 N+ b' N7 Z
cout<<"求v1与v2的并集:";- q1 Q# q; B) `
v=vectors_set_union(v1,v2);3 A, T: o# z& Y
print_vector(v);" f% O6 q/ v2 w5 \
return 0;4 g+ ~0 K9 @4 C
}[/mw_shl_code]
7 m, T& B% ~) G2 K( K5 q5 k |
|