|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 @8 `. _/ e/ y
- U- ]) h" M3 A9 k" q/ @# W; qC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:2 l- I7 q1 g8 A* f
[mw_shl_code=cpp,true]#include "iostream"
/ ?2 E' u) [% [# L+ \! C3 m#include "vector" 5 I( A7 ~, ]* _( l: @0 e9 v, K5 {
#include "algorithm" //sort函数、交并补函数
% C9 R: }8 G4 I, ]#include "iterator" //求交并补使用到的迭代器$ r; p% w# I8 _7 [, D
using namespace std;0 F) c" r- ?! C4 Q
3 I# ?3 P; [5 i3 c, |//打印容器vector
0 D8 e7 B3 |! \ dvoid print_vector(vector<int> v){
& H0 \! A. M4 |: Q if(v.size()>0){4 Y. W9 E' |& u& h
cout<<"{";
; g4 j P1 E$ z( ~. `% |8 C for(int i=0;i<int(v.size());i++){ 9 A0 g- e7 W2 B
cout<<v<<",";
. Q$ k9 i/ |; q }
% Y2 V4 D+ ~+ I8 B7 b2 m% F8 n' ] cout<<"\b}"; / d3 e5 x& V; D' O, y
}
: E' t* R4 j! a0 ^; Y else{
1 B2 ~* F3 ^* F& _6 Y1 z! X cout<<"{}";; Z- h2 S8 x7 l- S& r' i8 i
}
5 y0 w: c0 b6 e4 H/ ^) a% P( [+ f+ l9 K}
; b8 [* y8 n6 l* M; l + c: w5 n: `& ^' l& {3 t9 l$ a0 z
//容器vector中元素的去重
o X. x. U# k& Z+ Yvector<int> unique_element_in_vector(vector<int> v){% ~# F. i6 f5 w# J4 y: l- V" O P
vector<int>::iterator vector_iterator;
) A% z; P8 y( k sort(v.begin(),v.end());
* n u- w- @! Z- c$ [) G vector_iterator = unique(v.begin(),v.end());- ?& g/ O, E& ?0 g+ F4 `0 `2 s
if(vector_iterator != v.end()){
$ H1 ^, \8 K' v9 A% S9 c2 o: N v.erase(vector_iterator,v.end());" S4 n2 S; [3 i7 Z) e
}2 x: W5 O. ?8 ^# g1 S
return v;+ \- \0 f5 n% ~' @# q- q; f: S) i6 w- x
}, |" U4 Q$ h+ t+ r# ?1 k
; \2 g7 z. N4 g: v//两个vector求交集
5 k2 T* e* e- I2 jvector<int> vectors_intersection(vector<int> v1,vector<int> v2){6 A( b2 A3 p' m/ K& o
vector<int> v;
: U& k# y: D* T+ W! Q; Z sort(v1.begin(),v1.end());
% l" Z$ M8 O9 i: o7 m sort(v2.begin(),v2.end());
7 F" ^* R1 a, s3 [2 a set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 s F) j% s, f* e
return v;
0 m7 [' g' |7 q! ~0 I7 [}
, q) `& \: S z 1 z, a. Y) \- j* J! g) W
//两个vector求并集0 ~2 X( {7 Q( _ d7 p' Y0 F
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
% G0 B" x* h- |. k5 I# T1 t0 @ vector<int> v;% \* f9 b# j. w9 A- w. A
sort(v1.begin(),v1.end());
% `: g# L0 A* u8 u4 _# O7 M5 D sort(v2.begin(),v2.end()); 8 E9 y' V# P# a1 V
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
% U, c0 o2 J5 _ R% m& K return v;
3 e8 |% _) E; H3 [}) Q {8 \% o& ?, S3 d8 l) C% S
5 ?3 X' o- N/ F4 n$ o//判断vector的某一元素是否存在+ t2 K6 s' `0 B; J' w
bool is_element_in_vector(vector<int> v,int element){& `! _% _- X% ]% o3 ], A
vector<int>::iterator it;5 \4 T ]+ w7 y/ ^, q- {
it=find(v.begin(),v.end(),element);( y3 ~! \) x' W
if (it!=v.end()){7 f$ e m5 S. ]( @4 f& p
return true;
) n7 D9 v4 P/ J- T( ]: h1 H }
) A* B$ ` A j3 B @$ K else{
- @4 i6 R. m+ a return false;' X+ h7 ?! Y) j- b7 N( X
}9 d2 _6 Z# O' O- U* y
}8 U0 M/ R* s3 W: ^! n+ T! C4 m
8 i, g/ O& h3 L a
int main(){
( T- Y/ W; h# j/ Q vector<int> v1,v2,v;
$ R H' S) `' H0 v, T& m- s8 @4 V v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);4 Y8 u- @: i% O( x4 U
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
/ U, l4 r/ K9 W7 `. o, V/ r, s' a9 b cout<<"对v1去重:";
) O! q" ]) i# S( e v1=unique_element_in_vector(v1);3 l, w4 S& c1 X
print_vector(v1);8 P% j9 [( p9 z3 v2 _
cout<<endl;
7 m _0 ?! m; ^- T cout<<"求v1与v2的交集:";: Z" P% e- w& r5 O7 a0 N C
v=vectors_intersection(v1,v2);( j9 g1 ^; Z' S( \2 ~1 [: V
print_vector(v);: r4 @' |8 j5 Y J4 l4 z" n
cout<<endl;
- |4 O( R7 Q) u- P: ^ cout<<"求v1与v2的并集:";
{) i5 ]" J2 ~1 ^- e, c) A2 D v=vectors_set_union(v1,v2);+ l1 T q- w8 R& z2 A9 @ l: g Q
print_vector(v);2 C7 @* z( w* w0 ^. G/ O
return 0;$ t/ t2 y3 h6 \3 u3 L
}[/mw_shl_code]6 g5 c( {; o% P, J* A
|
|