|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
* |2 l5 ~* T7 N. z* D
$ B: v6 f) a0 J1 S6 m0 d3 @
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
6 l; K4 X) R2 C: q6 T[mw_shl_code=cpp,true]#include "iostream"0 l4 u$ J7 H! ~* ?
#include "vector"
5 A1 t; x& Z7 D" c" ], a0 j#include "algorithm" //sort函数、交并补函数1 d1 u- ~0 a! i) | h
#include "iterator" //求交并补使用到的迭代器( m; l" Y8 u3 }1 h
using namespace std;
, V4 T: F3 g. {! c. A9 @
: V; N, Z+ C! i; A( H//打印容器vector
& l/ A% A6 o' h$ q2 Nvoid print_vector(vector<int> v){/ b" i4 Y6 b5 @; f% \: ~ J
if(v.size()>0){# k1 \: K0 ]7 j- C
cout<<"{";
- [$ z4 F, ]& A; u" T8 Z! ~ for(int i=0;i<int(v.size());i++){ $ N2 Q; ?* `1 r9 K" w
cout<<v<<","; - Z# ?2 k5 L- d- y/ u5 I' {
}
7 J5 i9 f' F. n3 G cout<<"\b}";
% _- S% |1 D7 Z) G" X0 l }" O8 C" ~3 c; A4 `( @" I8 i
else{- e' M8 E3 C& P" N1 ^0 w
cout<<"{}";3 s3 B/ X- |5 q
}
! ^/ K2 y3 G$ P/ B K}
4 D( Z+ t( p. A M+ J( X$ f1 P
0 E$ ^ ^$ |! F! R0 M! C% k4 C) @//容器vector中元素的去重
: W! Q- ? V# @) ~: Svector<int> unique_element_in_vector(vector<int> v){; j# [) w% b" @ [- R
vector<int>::iterator vector_iterator;
8 Y8 S9 j, C3 p0 d: d( w sort(v.begin(),v.end());- o, [; X0 J. j, r0 R ~2 v( l; C
vector_iterator = unique(v.begin(),v.end());
0 _4 l$ I4 _7 F% j; X7 O. x3 ]8 `7 ] if(vector_iterator != v.end()){, |8 y/ t v* P2 ]. F
v.erase(vector_iterator,v.end());
1 i- Q7 a! k0 b0 G! [5 | }& w% B, ^# f: f3 E2 t' c# U
return v;: ]& q( \3 S! v1 k. _+ P% I
}/ S1 W) o7 k {6 v% ]1 [) T
6 H: {9 }/ }8 @% N8 f7 Z! s
//两个vector求交集
/ l' K: f/ {4 L u$ `: xvector<int> vectors_intersection(vector<int> v1,vector<int> v2){( u, n- H! ]1 |, x7 o, C' k! R
vector<int> v;- x: U/ p: @6 I- V0 b
sort(v1.begin(),v1.end()); & {. {5 H2 e: Q# Q- m3 _
sort(v2.begin(),v2.end()); 9 Y& p; I0 R2 d: V6 V
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 h3 H* T& L% ~/ Y4 Y return v;! [3 V/ a& _ ^( I/ q; ]# R
}: ]) z& T3 Q$ I7 @2 D' g, H: f
( y, t- J8 K$ {
//两个vector求并集$ K9 \0 B# t6 K3 o; j
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# v( I( l9 c- L% E vector<int> v;, e7 A9 n4 e" G/ C) ~
sort(v1.begin(),v1.end());
1 C8 \ s1 `; I' M+ p7 | sort(v2.begin(),v2.end());
, | V- I" ^% e& l2 V& G& S set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
/ y$ c3 @4 i/ H return v;- L5 i3 _% |7 R. E! y! `3 `2 c
}
2 p& o1 ~- S, D4 d% c1 N6 b V- k ; }& q% b2 V& Y; O
//判断vector的某一元素是否存在
" J9 ^9 m3 k/ G4 f; K. Ubool is_element_in_vector(vector<int> v,int element){
. N3 z+ P, b; R vector<int>::iterator it;& w. R) n# r( H: m
it=find(v.begin(),v.end(),element);% R7 g9 N" U2 E( H7 l1 E- C
if (it!=v.end()){
7 e0 c+ M+ |1 y9 \6 N. x return true;
! x, D8 ]/ `3 v }3 w# x, \( d/ m" K' x) P% t
else{. X' I6 b1 Q3 r7 I# i
return false;
1 c0 D6 }: j6 g0 v8 P/ g* E }- u' u p. u1 e
}* o$ V0 J' U! |# }# ~: p4 L% f
" x" i3 a6 W+ ?) u5 |3 Nint main(){
, C5 Z8 r# N R! D7 \7 m: t5 H vector<int> v1,v2,v;
6 V, [$ m8 A3 N0 s" y v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
5 n/ X" p/ B5 m+ v) z5 y cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;' U" V% }+ P# x. a8 E7 F$ C: v
cout<<"对v1去重:";# Y& }5 m$ M, O9 i
v1=unique_element_in_vector(v1);! R- {8 u+ T) q# f' O, }5 X9 B
print_vector(v1);
0 R, F5 [+ _! o" N! j2 O cout<<endl;
: P1 a7 @3 I% v9 h4 X0 y$ e$ K, R cout<<"求v1与v2的交集:";
B0 f* \6 K7 J1 a v=vectors_intersection(v1,v2);) @' Y9 i+ W% x2 A G5 c
print_vector(v);0 P% x1 e6 h' Z* d) J
cout<<endl;
( L3 @) F6 \, V6 n cout<<"求v1与v2的并集:";$ @& \: l/ @- G W o0 l
v=vectors_set_union(v1,v2); }. `- ?% N* G/ N0 I
print_vector(v);
# u5 s& a4 ^) ` return 0;. V- @$ z, S9 m+ o% Q% t# G
}[/mw_shl_code]
1 x s; x# ^' h1 r- m( G |
|