|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
/ h" j1 B( w# _
0 M- w3 _+ u* f. ^
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
/ w! Y# Q& B6 r' i. d[mw_shl_code=cpp,true]#include "iostream"
$ w' Q7 D' O8 |1 m; y1 A9 Q' t#include "vector" 7 v! z V/ F1 t1 I' a7 A
#include "algorithm" //sort函数、交并补函数' I- B+ C: j3 q. O, C$ x& O5 C
#include "iterator" //求交并补使用到的迭代器9 |0 H( K/ Y+ g; Z0 D. c- T
using namespace std;% i4 w0 p9 [% D" f0 y: j
; d# a P. C2 G7 B$ \( C2 G
//打印容器vector
8 q! a9 _ b' r3 f8 i) C1 ?void print_vector(vector<int> v){" H: X% Q( r( m, b# t1 @. Z
if(v.size()>0){0 J* o1 M& j0 B5 I- t$ `
cout<<"{";
! S" M. Q/ b: B. [ k$ Q2 E/ }! ?7 x for(int i=0;i<int(v.size());i++){
8 c0 C* L: X6 w/ ` cout<<v<<","; ^+ r5 H7 K* |
} 7 b& A! n; Q! E9 ~9 S
cout<<"\b}";
; K! M/ x0 _' ^9 c7 G- E$ k' ] }
; @( W% Z/ M2 H2 J) Z+ b else{- v3 I3 R0 O' d, i
cout<<"{}";
+ E3 R6 D0 Q4 Z } X% M$ Y" Y3 R9 L
}6 d$ a! k6 P N b& @
* R3 _$ A. r3 Y+ P* g
//容器vector中元素的去重! K. }0 d C; |& n4 m& k
vector<int> unique_element_in_vector(vector<int> v){
& d/ o* Q0 E3 |9 G7 {5 w vector<int>::iterator vector_iterator;; H, Y2 w3 ~1 c0 l9 G# s% b4 q
sort(v.begin(),v.end());
& Z" _: s: w% Y: @* y, m2 h. Y vector_iterator = unique(v.begin(),v.end());
& U3 Y$ T/ h1 e0 ?5 ?9 H if(vector_iterator != v.end()){
: F+ p! r2 X% |. n" A v.erase(vector_iterator,v.end());
2 J7 f. Z) ~! r( b }0 K1 @" d/ A* M! Z s9 f
return v;/ D1 Y2 G3 E+ Z# ^* z0 o! v
}
" @& @$ E6 q/ n' c
* K! e% k/ i# d8 C% V8 J, x/ S* P//两个vector求交集
7 [$ \/ e- ^0 `) [! U, Q* I6 r7 ovector<int> vectors_intersection(vector<int> v1,vector<int> v2){# S$ r P. V- P5 s# V" A
vector<int> v;! `6 M1 h' X7 [1 Q, ]% b& o
sort(v1.begin(),v1.end()); 1 D7 X+ C+ J% L, U
sort(v2.begin(),v2.end());
' m# [) \8 i+ k" ^ set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 * [* S" F: B) s; ?1 [
return v;
& E( q% ^* Y- s. a& V}$ V9 l0 Z5 p) {$ J! j
& O, q! Y. S/ {$ s- z/ H- T$ z0 w9 b
//两个vector求并集
) y. v: z3 u# o {vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
8 o/ H) O/ _& |. m vector<int> v;
& a! x- \$ C- _0 `7 J sort(v1.begin(),v1.end());
/ E! N; w+ I$ L3 F' V0 b sort(v2.begin(),v2.end()); 8 k# X% Y, b& ]# v
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- J- Y p0 ^4 \% F- t7 n" B* t return v;4 Y3 X% n) N" M* r
}
; o0 ]7 V' n" e. N' |: l7 h9 r
; c, n+ O6 t' a: n' {. I//判断vector的某一元素是否存在5 R; ?$ w; D7 j0 J( w" x! ]1 C
bool is_element_in_vector(vector<int> v,int element){, T7 _5 J" Q3 d
vector<int>::iterator it;
9 K5 ?! }' z' l6 ` D1 K6 l it=find(v.begin(),v.end(),element);
: g2 j3 W* j! w2 j( E( u if (it!=v.end()){
( \& ~' Y1 s8 [8 g return true;' ^- `: z/ D I) W& ~
} B* @# l9 g$ Z' F/ s. b
else{/ J$ [% I% |* [
return false;# e t9 U5 c* _8 D1 h2 M
}9 Z8 y, t. B$ z* J
}6 K/ Q3 \2 Q! x8 Z! }3 W. y
, k V9 X( T k5 s* Bint main(){
8 }7 h" f+ U5 c& x _ vector<int> v1,v2,v;' w0 M) l1 b8 u' `2 c: i& _
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
3 n# o: `. v/ Q. H1 G$ L# M. ? cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;5 h9 M' `& f' y
cout<<"对v1去重:";
* Q( `: O2 v) W" }: p v1=unique_element_in_vector(v1);
' n( x: J) ?% I# G print_vector(v1);
. I3 B3 m$ _4 N; p8 D1 z! a cout<<endl;# z" {7 D/ Q& Q) H0 T* ]$ B) k
cout<<"求v1与v2的交集:";& E4 L/ j! l0 Y# k, Y% ?( R. L
v=vectors_intersection(v1,v2);
9 q, e4 L2 Y: Z q8 l/ r print_vector(v);
' N4 [) b% v+ g- N cout<<endl;
4 i9 T1 s7 J% R8 \& C& G' u cout<<"求v1与v2的并集:";' g# u4 a! t. F/ I& j
v=vectors_set_union(v1,v2);
, ]; x$ u7 O/ e print_vector(v);
- N6 m# \9 T4 u! ]% e return 0;7 T! S, g4 N) t4 h( l3 u3 z
}[/mw_shl_code]
9 ^& v+ P1 A3 }% x |
|