|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
9 ?3 o# F& X' W- c: S
' o2 T* h1 Z, t, K/ Y4 ^C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
% K( K% V; h8 t/ s6 X[mw_shl_code=cpp,true]#include "iostream"$ v3 V5 Y0 R* e' g% Q
#include "vector" * O+ x8 u! i6 s$ o8 H
#include "algorithm" //sort函数、交并补函数( Z% G/ @- T2 H: s+ c+ c2 `
#include "iterator" //求交并补使用到的迭代器* V" S' l3 |8 c. Z! m% Z0 R
using namespace std;* ^3 j* N8 I2 ~" u7 k' H
0 H3 F* Y; A% P; p/ `* C3 ~//打印容器vector
: R$ o* c' S* f( D, C/ P8 k" z2 evoid print_vector(vector<int> v){
/ Z' _. r& x4 x' {1 s/ p if(v.size()>0){
# t- I" N* k5 c7 ^0 M3 B cout<<"{"; : M' ^ N9 J& o/ |" }! ?4 s& ~# ^
for(int i=0;i<int(v.size());i++){ $ u* y! g! P, c/ `/ P b0 a
cout<<v<<","; ! x4 c% Y X1 }, g" V* A/ }. T3 O
}
: X' O/ G+ d) O ] cout<<"\b}";
2 t5 a% `) c0 a, z! X( G }5 b2 N! s' e( T" c; _/ }, P# a
else{
6 v. S: V( a% }- Q% t" K. t cout<<"{}";
& u7 p8 O# v& n% X6 l& Z% v }/ r2 ^, ^% m$ g \2 z& ]8 B
}
7 y8 g! g% t3 _5 P& o$ y ' [1 v% x R3 B2 E4 ?$ [
//容器vector中元素的去重
" o4 h5 l: ?) hvector<int> unique_element_in_vector(vector<int> v){
8 d9 o2 y1 [' U/ C vector<int>::iterator vector_iterator;) K+ c4 l7 I3 U( k$ @
sort(v.begin(),v.end());9 A+ G- Z4 f7 k+ @/ \, J
vector_iterator = unique(v.begin(),v.end());! V y5 b Z! s, M; d- u
if(vector_iterator != v.end()){. c) @) O m+ ?# K0 e
v.erase(vector_iterator,v.end());
5 k3 S& h% h$ E1 a0 q7 \7 { }3 K G, V0 E; F- m" u; S9 k8 k) {2 g' }
return v;
2 \* e) W9 H: T. U K* ?- D}% I8 q& P% Q4 W- A: e+ @+ I. k
3 g. v$ T! ?# A7 X//两个vector求交集
6 h( t5 _( J: f6 ]. h* uvector<int> vectors_intersection(vector<int> v1,vector<int> v2){7 x9 u/ ^. b9 Q3 b1 h" n, ]7 S% Q, l
vector<int> v;
& O% B' q5 v8 h6 ?% o2 }9 p$ T. N I sort(v1.begin(),v1.end()); ; @9 _3 D% u9 h' ~% f
sort(v2.begin(),v2.end()); 2 k4 D( [0 h2 `4 c& g
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
; P1 X& Y, t6 D0 L) j2 | return v;
4 _: p; w5 s( C}
: ]5 o u4 G8 z$ N0 }+ ~1 V2 ?
p- {+ j: \. l1 x9 U* \//两个vector求并集, @. n5 l' p$ r- _- T
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
8 y; X2 T& y1 _! _" T vector<int> v; N* ?' Y" l; ^6 X9 T
sort(v1.begin(),v1.end());
' x8 `; e& I$ H2 K sort(v2.begin(),v2.end()); & Z. W; p7 Z. S5 c) c& B5 ^
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 S; V; ^3 C& R* E1 k! a
return v;: e. g* Q4 ^( b! z
}8 u( K$ C5 v. q5 C! r' |
& E1 c5 }( v" D: y% s2 ~//判断vector的某一元素是否存在0 s" @; D7 B: q L
bool is_element_in_vector(vector<int> v,int element){
L. r+ V: f) a vector<int>::iterator it;9 [# ~" P9 X' a% e# E
it=find(v.begin(),v.end(),element);4 f# P* B) ]: |8 {7 t6 K
if (it!=v.end()){0 F$ i# F0 P" w7 ?: Z1 Y% Q& W
return true;5 O& Y) d8 Y- A4 l# B, s, s
}9 J" b) H. J' f& e) n8 }
else{
( v/ ]2 u2 [7 M) I- M7 ]' @' W return false;6 T. e- V! |, @# D
}
$ k9 ~1 h% F3 ]/ Y/ Z}
9 y0 ]" d" N+ \ 5 y/ U( [8 U% P4 G7 L; P! J
int main(){# U! |5 q0 h; f/ I4 q3 p
vector<int> v1,v2,v; f. M% }1 x8 n ]$ B
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
+ ?* f" ~8 L' J+ \ cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;9 a% H! j3 G) }; r
cout<<"对v1去重:";6 y* F! P; y; {9 o2 q* l
v1=unique_element_in_vector(v1);
1 o. S! J: U( i* {- o# X: q print_vector(v1);' |& g' |" c, t T0 S
cout<<endl;0 h8 V8 X* h$ c, H
cout<<"求v1与v2的交集:";/ ^$ Z6 f% ~$ ^. d7 J
v=vectors_intersection(v1,v2);
( X. h3 F! ^6 H+ t+ D print_vector(v);4 M+ |# B' [- N% [
cout<<endl;0 @! ~( x) ^0 O, l! | |# V _
cout<<"求v1与v2的并集:";, R/ z/ g$ w$ b/ O
v=vectors_set_union(v1,v2);6 a# q. B( y- ]5 ^; T
print_vector(v);
2 u' Q3 E" I. {. n# z g( J$ h return 0;
/ V4 r, V/ f6 v6 y}[/mw_shl_code]
3 `. e0 n! q5 [4 v- ~2 D |
|