|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
7 J& G( k( C) E' h
3 s; m) ~& t8 k( M( {9 F) {C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
9 w& B8 f+ e [3 ^+ l[mw_shl_code=cpp,true]#include "iostream"7 w' }; s" k9 m k u/ D
#include "vector" 6 [2 e9 {" y8 u: d0 S: C- `
#include "algorithm" //sort函数、交并补函数
- I4 w1 s, P/ ]" A#include "iterator" //求交并补使用到的迭代器, i4 R# `; P- U L! f" N: X9 Z
using namespace std;
/ N4 j; b; b% l# S
) Y2 x; y; m8 Z6 o) ]( G/ Y//打印容器vector& C9 T. |; k$ q
void print_vector(vector<int> v){
, o, x; R S7 O) Q& b if(v.size()>0){5 D5 ]/ q# A) X( y5 V( E6 x U
cout<<"{"; 4 G) B+ g- S; y% b. F
for(int i=0;i<int(v.size());i++){ + [& S0 H; Q5 I" J5 @' p2 i- \$ B( \
cout<<v<<",";
X) _9 o$ B! P/ o W4 D/ o }
8 i* g8 n7 ` F( s9 Y* {! M2 C" d T cout<<"\b}";
! c* r, J: o' @+ v7 J }) o" C+ \! n1 F, f, s7 u
else{% ]. i& `& F% p4 |7 W @- p
cout<<"{}";
0 h% M q) D) s% ^; o/ U }
2 N1 @- d( f+ E) c# `) k}
. v8 ~. h R+ O+ v. f
( [7 w; ?7 W8 i |1 m$ n//容器vector中元素的去重6 q, u- _" e+ S. N1 F3 _! M5 ~
vector<int> unique_element_in_vector(vector<int> v){+ [% s3 k' ]& M0 ]1 O
vector<int>::iterator vector_iterator;6 P6 F, a$ o5 a& y
sort(v.begin(),v.end());
7 U: `* v7 D2 Y, m# U; U vector_iterator = unique(v.begin(),v.end());
/ ]' U- a, I$ E; V: G* l if(vector_iterator != v.end()){- r. l9 S k- J( y- T6 g/ Z
v.erase(vector_iterator,v.end());- V7 s! h) _" b
}
3 T! J9 q# A; L return v; }) U5 r8 ?+ h5 {6 E1 Y: L
}* ?: }2 p: F7 R9 |! o
1 p) Z" M, }6 t$ h; l//两个vector求交集4 I5 Z, I/ _4 Y+ R+ S; i0 L
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){! W+ G' Z7 g$ O8 |" a) o& s
vector<int> v;* g3 _2 `, W5 k7 {& w- g3 r9 q0 T9 `
sort(v1.begin(),v1.end()); 9 f& q. W7 b6 c5 q/ M* b
sort(v2.begin(),v2.end()); 5 _! n) T' V+ F! i6 Q4 @
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
% _8 A4 w# @) ^% Q return v;
3 o' ~. i4 {! B3 @7 W! d) H' [}
) B7 M o7 X7 A; |; H- i % L( x5 w. a$ g* V7 ^$ X- f, }
//两个vector求并集
( J4 X" \& A: P4 D) D1 L& wvector<int> vectors_set_union(vector<int> v1,vector<int> v2){% G- u9 ?. a& s* {
vector<int> v;" s0 P/ G2 d' n/ ?. H
sort(v1.begin(),v1.end());
/ U' |6 M0 S4 k6 {7 u sort(v2.begin(),v2.end()); 3 z/ c/ t. v" e7 `" q# ^: i
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
4 k* w# }2 p/ u return v;
% }% n- D2 x4 q- F}
3 a. x" c! ? V5 E 2 F M. k# \0 `' J) N9 e
//判断vector的某一元素是否存在
# r, G# t! a, U4 I1 P& B/ ubool is_element_in_vector(vector<int> v,int element){9 @1 i# H" k& J
vector<int>::iterator it;
1 | v& ?! ?# M, `" `# Q it=find(v.begin(),v.end(),element);! v B( J, n+ D, {8 P
if (it!=v.end()){
/ D$ K3 T* M* d) {: O. c* N) A3 }) Q return true;' f A/ t: d% E5 z& N; B& B* D/ h6 w
}8 X& K: a, w; W) y
else{
. Z6 j' n2 o) P* ^3 w& [ return false;
( L2 T- u" V4 B m- K }
) j$ }( { G( d+ k}
( {+ A: R% O6 h; e' |/ A5 h
8 \# q; b0 Y+ M3 z* f2 k- x* w, Nint main(){
0 a/ M3 ? Q1 ?5 y$ o p vector<int> v1,v2,v;1 O# m( `5 p( Z
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);+ @- }+ i0 o$ K: b/ O/ r6 w$ C
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;+ F& z: n: l/ _2 j# c
cout<<"对v1去重:";3 p5 i D. g! h% u9 l% s4 B: _
v1=unique_element_in_vector(v1);
, q" n# O t0 B" M; v print_vector(v1);
7 b! ^' M" c, O" u cout<<endl;* ]2 D: P" L0 F) W% Z) X! {
cout<<"求v1与v2的交集:";
! Q3 ^! u7 l+ Z) u# X' v v=vectors_intersection(v1,v2);) v/ b4 Y# _( g- T7 C0 ~
print_vector(v);
( U4 x: V# C- ~; G7 t cout<<endl;
z y2 ]! B5 S9 }* \% i cout<<"求v1与v2的并集:";
+ E+ R2 [! j/ U) y' e) z v=vectors_set_union(v1,v2);
$ l. X% [( a- ~7 x- a _ print_vector(v);
' P$ v: p8 q+ }/ A return 0;
& Q4 p. b6 X; u: j2 m9 u$ s1 u}[/mw_shl_code]
7 K. K+ q L$ G$ i" @$ N' d |
|