|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
* w7 g% S' D& ]8 E6 A- a X; X8 w
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:4 s* a# |- h, ]0 x( R+ i: W4 I9 X
[mw_shl_code=cpp,true]#include "iostream"3 U+ {8 g5 U2 c3 K) Y
#include "vector" : `5 p( J1 \2 D- @5 e7 V7 I# L, B
#include "algorithm" //sort函数、交并补函数
1 ?7 f& X, ?7 Y2 v e- o$ J#include "iterator" //求交并补使用到的迭代器0 @# e; Z: ^) G& L: F1 |! N& s: }
using namespace std;1 O5 o$ o- C, `% A* l8 b
" U# @6 L: x& O$ E5 J) d' Q
//打印容器vector. Y! O# F" O0 r. g9 |% U
void print_vector(vector<int> v){
1 M) p7 }% [# m" k2 M: O3 g/ e) }( z if(v.size()>0){( W2 u' {% {& k- x
cout<<"{";
' o* i `; a, e5 [% Y& r for(int i=0;i<int(v.size());i++){
: g5 @" K3 G. C% n5 _ cout<<v<<",";
& o: G% g `5 N- V$ h }
. B9 K$ @! Q% ?% z cout<<"\b}"; ! q7 S1 P( {; e: m5 y
}# z$ {+ _( |) @" O
else{" p7 A' n7 t" c' x6 b; _
cout<<"{}";
2 N5 M7 L2 k. s6 r9 X" T: U }7 W5 |! R7 B/ H. n' l
}9 H1 h% b6 {. S k0 ~: |# q
/ Y$ w# g# d& n: [& Z//容器vector中元素的去重8 B# z# Y8 g: a6 ], V
vector<int> unique_element_in_vector(vector<int> v){; Y+ }3 v, x9 Q" [9 A* X
vector<int>::iterator vector_iterator;6 b' g# {* H" F9 f0 g% `
sort(v.begin(),v.end());9 b; e. L8 O$ g8 q. B0 z
vector_iterator = unique(v.begin(),v.end());
/ W; _( {; Z% z if(vector_iterator != v.end()){
# k0 q$ _% p: @4 u v.erase(vector_iterator,v.end());3 f% j* U5 f7 U X+ M: o
}2 e, ^8 |) M% T0 _, j
return v;* [: \! a8 [/ G4 o
}7 Q/ l* Q& |+ D+ x
! c: M. e6 V9 s4 k//两个vector求交集
! k/ f }$ k8 Q( d% l: Ivector<int> vectors_intersection(vector<int> v1,vector<int> v2){
$ W) y. C. g9 p5 ~% | vector<int> v;) A8 I& L) E+ X; F! y4 h
sort(v1.begin(),v1.end()); & ^" X$ K% w- r6 B3 H5 B, m& j
sort(v2.begin(),v2.end()); 5 z# t# R! b8 L' V% \! p4 s
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 % t$ G$ y) t7 \5 x% D8 d' ]8 R
return v;) k9 r& {$ c, j, y8 h4 e
}1 V3 k7 i0 o2 F; Q( j
3 p* W' W1 K5 \, T6 D
//两个vector求并集
( }# [- [6 h& c+ v. b6 g% ]' J, nvector<int> vectors_set_union(vector<int> v1,vector<int> v2){, d6 s+ Q* f, N
vector<int> v;
6 ~+ @2 ?3 L g9 y" z2 k sort(v1.begin(),v1.end()); 1 _7 ^+ `' \6 z( n1 i, R, R# X
sort(v2.begin(),v2.end());
, m7 H9 O0 Q) p% J! @4 k set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 0 u0 O% q) i* o' q, L+ s
return v;
8 d/ {: @) y4 C}4 \% {7 r9 K! x3 q4 H! n l; ]
, T: m G( s. X4 |! k//判断vector的某一元素是否存在/ G8 q, A8 f, J. a- J
bool is_element_in_vector(vector<int> v,int element){3 E7 T/ @9 y! b; j/ H
vector<int>::iterator it;! a+ m2 v6 D, E$ p; d7 K
it=find(v.begin(),v.end(),element);
1 C5 m6 U9 ?; v if (it!=v.end()){! l3 ^4 q2 S4 G+ E/ I
return true;
, w+ ~" V4 {* C' S+ r! U }: h' B _& y' q7 k6 q! Z* t
else{
+ H. u7 w( B: Z: t& F5 [ return false;
$ N5 p# l* X; o0 @ }. T& k! K9 E5 Y, I& G4 B9 o
}2 u% T( x6 u. X" @5 a3 |) V
) n; B6 V' @' {, }( Y, \6 Hint main(){
% L! p0 U9 H5 T1 k vector<int> v1,v2,v;
7 z* l1 |, v2 W v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
' h: a3 ~& I) e4 W cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
4 K: n. V: v: g! F% Q0 M# ] cout<<"对v1去重:";
( E, W \3 W% J0 s0 e A* n v1=unique_element_in_vector(v1);
" o" G' B; O S/ H print_vector(v1);* f; F2 `# p, m3 K8 L8 _
cout<<endl;
e, y9 D b: w6 s# K: Y) `9 b cout<<"求v1与v2的交集:";
# Y% C1 F1 A+ u" J& X4 V. `! k& S v=vectors_intersection(v1,v2);/ P5 Z5 n) { B& u6 q& a$ k
print_vector(v);" u1 [) p$ r7 F6 Z
cout<<endl;
: r! I3 C4 K/ A' M; b" O cout<<"求v1与v2的并集:";
' [; G4 D; P W. [" |2 m, t; r v=vectors_set_union(v1,v2);
6 Y s% @% P9 ` print_vector(v);* N" @6 v& T& y' r8 m+ Q) ~1 c
return 0;3 y) g e9 V6 J# Y0 S3 R9 P2 h! |
}[/mw_shl_code]
0 o: W6 N* t+ ~. M/ U: B |
|