|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 I s; s2 r/ ?
0 x1 ` P! ?6 H& C5 L/ JC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
5 ?+ r1 U7 p* k4 L, E l5 I* J[mw_shl_code=cpp,true]#include "iostream"1 p- L, ?& e: ]1 Z% m6 r
#include "vector"
' y: W n/ G+ a6 ~; f( {#include "algorithm" //sort函数、交并补函数
. o# Q. O6 ?- u, d" f* C I#include "iterator" //求交并补使用到的迭代器& p( G; S7 p( u( o0 O+ t' Z
using namespace std;
" M3 N8 c6 J+ X* ^ : F, [4 @4 k) }; v
//打印容器vector
7 b5 r7 g7 n/ e) b- A: Svoid print_vector(vector<int> v){
' _ x/ ~, E* M" D" q! j if(v.size()>0){
1 J. g4 h( k4 u A0 h cout<<"{";
6 ~# R: \% }- g0 P; L7 }7 K; w! h for(int i=0;i<int(v.size());i++){ ; H m" g& @; Q, T2 H' L
cout<<v<<","; 7 r0 y1 `- j6 Z! U9 x
} 9 u3 z( D! s) ~0 l! z
cout<<"\b}"; , x0 t2 J/ I/ X/ x9 D3 o6 O2 _+ R
}
6 r; z' r+ M0 |; M& p2 R2 Y else{- v I: X1 l$ ^ _! ~) g( P
cout<<"{}";0 X/ I9 Q' T( f V" |+ v" g
}
- S/ i) G- O2 [. |2 h ^}
6 \$ O: U( T2 Q" J " N( M5 ?8 B$ _
//容器vector中元素的去重& w' B. C# x P; T2 F
vector<int> unique_element_in_vector(vector<int> v){0 c4 Y i2 C6 O
vector<int>::iterator vector_iterator;
^, L0 e. I( G* \ sort(v.begin(),v.end());, H9 ^6 v4 `( F+ @
vector_iterator = unique(v.begin(),v.end());$ F- }4 m. m$ y9 l/ K. c& H# W: f
if(vector_iterator != v.end()){
8 L$ o a- L% E. n9 _; W v.erase(vector_iterator,v.end());
1 O5 `( H, l* X2 U8 F2 H }8 Q; ^$ H, K5 _5 i
return v;
: A/ z6 {$ X( Z}' n0 j* ~3 }/ [' H
# U6 p% T! s4 p) }4 C//两个vector求交集
4 C' P5 F" T3 J4 X# Qvector<int> vectors_intersection(vector<int> v1,vector<int> v2){/ \+ D y! u1 Q1 O9 r0 P$ F
vector<int> v;
/ b! N! {2 h1 t9 T5 a3 m sort(v1.begin(),v1.end());
3 i4 A8 ]* o# E1 C0 Z sort(v2.begin(),v2.end()); 7 I( L3 P/ }& W; _/ o7 G/ A. H
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 # |6 f/ w$ J& `. ]2 w
return v;* E5 C5 t" P. h2 w, l
}5 ^+ f* j( A% j! \4 B# G
4 h4 t; p! c. U2 V
//两个vector求并集
4 |" ?" [) g$ r/ L. Zvector<int> vectors_set_union(vector<int> v1,vector<int> v2){; Q" O( Y; p' f9 K, d: e
vector<int> v;
8 E! v9 K: e: _* Y2 L sort(v1.begin(),v1.end()); P7 i# f! n/ g% s: B2 Y* D# ?
sort(v2.begin(),v2.end());
1 P0 g0 {, ?, h# i set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 0 D6 q" O3 Z% C
return v;8 j5 `$ Z- v9 [
}2 O; D; B. W1 Q7 A, m' Y% q# i
q& N. ^! P& j3 {//判断vector的某一元素是否存在
2 o9 X+ b2 a V. q; ybool is_element_in_vector(vector<int> v,int element){# d# v' }2 `. v# K& g: y) S
vector<int>::iterator it;6 u |: {& o! t) E4 R: h p
it=find(v.begin(),v.end(),element);
* @* R3 T5 E+ S- O if (it!=v.end()){
6 H g: h9 c- s$ o. x, A- A, s return true;
+ C. A. Z; Z# M* T } t" e3 b4 N- |' Y$ B% |7 }
else{
. C2 ?/ k- d q# Q% i return false;# T) c( W4 H" A3 V
}
; a. d' J$ |" {}) B4 h7 t6 S `% Y# U; S
- ~ Y4 M+ o, O; O; zint main(){0 P$ Y# p' e# b! |! o& b. X' t
vector<int> v1,v2,v;5 g: z# ?3 Q) D' V
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);* @- i2 q1 P& X) P( O/ z6 N
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;: R5 D) M5 O. w& g; Z
cout<<"对v1去重:";
1 A& }8 J/ O4 V! ]6 l3 v( z v1=unique_element_in_vector(v1);
1 e0 J1 A5 N& p5 y4 W print_vector(v1);
! l" A6 a* {$ o7 U cout<<endl;7 E. f! Y+ l0 i% ~+ `8 ]
cout<<"求v1与v2的交集:";
+ O# r& W. F, y) e# b3 j* {6 [- a, e* @ v=vectors_intersection(v1,v2);
4 b) ^, w. g2 U) H: e print_vector(v);
* z4 `- J- R! V: K! \* C' `& [9 M cout<<endl;
' ^) J0 F1 s+ W2 i/ i: J cout<<"求v1与v2的并集:";' x D7 h0 T& ?4 z& ]/ {
v=vectors_set_union(v1,v2); u A! B( n' k0 h3 ]
print_vector(v);4 ~$ l! [5 f7 A- z0 x
return 0;
9 G& @% t9 O% {1 D @0 z% S5 t+ a}[/mw_shl_code]8 ?/ O. F1 R. S% O
|
|