|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 i0 F, W. Q% z
6 A& Q* N' t9 {4 J2 p+ l
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
W0 J, u+ A0 \! \: V g" g[mw_shl_code=cpp,true]#include "iostream"3 s! ~" L2 g( @. @5 {- V( m2 f# ^
#include "vector" . f6 s4 ]: c/ B# ~4 W& a3 u$ B' h
#include "algorithm" //sort函数、交并补函数
% |, I( B% z& I4 O- I#include "iterator" //求交并补使用到的迭代器 B: T& w1 B$ \. a) z
using namespace std;
! j+ t. X" K9 a2 s8 t4 y5 m/ _ # ]% { P1 @) J* h# _8 x
//打印容器vector8 f! @2 ~2 K2 z- }% U8 C1 p
void print_vector(vector<int> v){$ `0 g6 k( s# @7 X6 M5 C* q
if(v.size()>0){0 ]! T& s- D( f! e- o! y9 e/ @
cout<<"{";
$ Y/ P/ ^6 j3 e) ^3 B for(int i=0;i<int(v.size());i++){
' h: ~& E. z4 I; F cout<<v<<",";
6 @. V1 y" g& e5 n V Y } 7 L9 C$ B. H- X
cout<<"\b}"; 1 n; }4 ^7 T6 u6 F/ t I
}
9 ]5 N# _6 `; K3 J; p1 H$ |" S: E else{# c) i" Y4 I$ q3 f) ?# u
cout<<"{}";
6 V! J+ h# e0 ~6 R }' y" n, ]3 }3 q. K l* U( m
}- D7 W6 C9 c9 O# R/ h0 Y! u
" [$ F; V- A* B$ V; }//容器vector中元素的去重
# p+ p1 Q& }. a/ A! l% Xvector<int> unique_element_in_vector(vector<int> v){
6 Y. _/ F( a6 ~6 O" W+ W8 q! A vector<int>::iterator vector_iterator;
+ r' C" A# x. z# T% w8 @ sort(v.begin(),v.end());
5 S) A5 j8 l$ U2 B7 F) |' [0 j. u vector_iterator = unique(v.begin(),v.end());
% h7 T, T0 x* r- A/ n- t3 f if(vector_iterator != v.end()){
8 B* D, W0 M0 K2 O v.erase(vector_iterator,v.end());
5 e! m8 Y! {, r1 G7 R. Z+ G+ z, r, F }
5 K9 K4 Z3 z$ w return v;
) s' c L' B* c _" }6 q}
0 _$ X( T- L2 a/ H9 y4 d 7 ~ A+ K3 L/ O1 _0 ^
//两个vector求交集, i8 h3 [4 L: T) r
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){3 Q* W1 a' O) Q' r
vector<int> v;
) }" K, @; f& l: S. I L sort(v1.begin(),v1.end());
3 C9 G ?# Z1 ^7 {: a8 Z sort(v2.begin(),v2.end()); 2 h$ W! }4 P1 M$ F1 a
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 + O% K; j+ m+ Q/ X; ~/ |3 P7 D! F6 h
return v;
/ `' [* l) d9 X) ?0 c, l* |}
( U1 ?- [/ B9 V( k+ _( i : h, Z8 H0 b0 o4 m
//两个vector求并集6 C8 R8 R- y3 g& p4 W
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){/ O e7 h7 A7 W9 U7 i- U
vector<int> v;
$ k1 b5 a& N" w1 ~ sort(v1.begin(),v1.end()); 6 i2 i& o, C) X- E' y
sort(v2.begin(),v2.end()); 2 B' e0 Q& j" p7 p$ {7 s
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 ]6 \9 W0 P }/ |' K+ O
return v;% w4 I4 G. }& u y" x! g
}
& e( b. s& q( N6 n * H! B, B% H% u6 C6 N) H% F
//判断vector的某一元素是否存在0 M3 U1 T3 M- y6 \' f3 J
bool is_element_in_vector(vector<int> v,int element){# C" _. W% ?2 H( L1 r" J* i
vector<int>::iterator it;
0 A" J1 F3 D: W/ L9 ] it=find(v.begin(),v.end(),element);
" w9 X6 e7 Z" s5 @3 c if (it!=v.end()){
- {- {1 p/ _" g) _* p return true;
9 k u: V: \' c( E: m* {6 | }
$ \7 E! @ ]4 k0 M& n: ]* J8 f else{/ R% R" M9 U$ ~
return false;
l4 c$ X4 \$ f: O0 L$ M5 M) O }
8 z5 m4 l _/ k3 p6 h}; J+ j# D! s5 M" t/ C9 M7 B/ n
1 Q+ o% Y3 G# r9 R. C) z
int main(){
, \$ f0 c& {5 h, J; I3 e vector<int> v1,v2,v;, E5 [5 P% f& B* V" P
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);: Z" K! ^" W. h6 |# v
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;' X" k6 U: _3 z2 ?
cout<<"对v1去重:";( V5 W) [! H7 j( ` }* w
v1=unique_element_in_vector(v1);* [+ F: E; Q' P5 |* N( x
print_vector(v1);5 o( C% T, ~ w, f
cout<<endl;
5 n1 c: e! e: q, e6 w9 \ cout<<"求v1与v2的交集:";2 R. N3 O# [' Q2 _5 x
v=vectors_intersection(v1,v2);- k+ g( r& W8 d9 @- @; O
print_vector(v);2 [3 T- A& |5 U$ o* O- S
cout<<endl;
. t2 R' z j/ v; D7 R$ I* |4 V cout<<"求v1与v2的并集:";" t/ L' N. V, Q9 T
v=vectors_set_union(v1,v2);2 y: E/ h( P$ v1 Z+ }; y4 e
print_vector(v);: V8 L( s& n* h7 m/ d' j& c" V
return 0;
( d) i* u/ v% w0 `, q}[/mw_shl_code]
1 v5 C, t g6 h7 z8 i- H |
|