|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
2 {/ U' ?% ?4 K7 y
/ F" c$ u/ V0 w* U% B3 [0 UC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
- j0 c# a4 k$ g4 {- o# H[mw_shl_code=cpp,true]#include "iostream"' f/ M+ K; S" l" Y# [6 d" J) v% N
#include "vector"
" Y, V. h2 Q0 u" w) o+ y#include "algorithm" //sort函数、交并补函数$ K, D" o$ Q Z$ s+ x) N; @/ n
#include "iterator" //求交并补使用到的迭代器0 N1 e) Z0 g$ d" R; v4 a
using namespace std;+ U6 N0 c: \% q+ v& u6 b( y l+ a
8 u4 b6 ^6 ]* R: A; W//打印容器vector
; Z8 z3 d; ^9 n: |void print_vector(vector<int> v){
; V( R9 i+ w2 _ G* _0 o# ^ if(v.size()>0){
( ^7 I# Q4 _6 o& p cout<<"{"; ( k! [, R5 R8 ]% E, P8 @4 z) M
for(int i=0;i<int(v.size());i++){ % r2 V& o2 K$ C
cout<<v<<",";
1 T, {" E3 g r& T! b: ]/ N } " {) `: M) X$ s$ l
cout<<"\b}"; 2 t5 f r+ I$ ~8 F7 Z3 u/ \
}
; p3 a; E7 a/ v: z' Y else{+ G0 n2 E9 T* o
cout<<"{}";' ]* t* N( G- s v, c; S* f
}, k% T+ g7 D" }! L$ T5 Q
}* o* x! }; n0 r' W9 |+ c
6 ~) e. ~' p c& i) s2 }//容器vector中元素的去重
* _3 N2 i9 ], T- \$ D6 \vector<int> unique_element_in_vector(vector<int> v){- z' M, _/ q6 J- ]# C0 N# j
vector<int>::iterator vector_iterator;
7 Z: R& }1 J" O$ `/ n v; v sort(v.begin(),v.end());
& [, U) W4 D9 x2 \$ t0 { vector_iterator = unique(v.begin(),v.end());
/ |- j# J- J' G3 q if(vector_iterator != v.end()){
' n3 m4 S( [% R5 ?3 T, E" x v.erase(vector_iterator,v.end());
0 n: s8 m, c2 B6 O0 b+ D3 z3 S }
2 U; L. M& X- Y' z4 z& R, }) | return v;- y8 g; U; a. {
}8 b+ s. T* x/ p% U; H8 N. b
) Z) w- T4 Y6 j/ S) g' W. \$ `2 N//两个vector求交集
2 C+ T' Y1 t0 H# ?: @5 Rvector<int> vectors_intersection(vector<int> v1,vector<int> v2){, D$ p7 S7 m2 c& ^5 d) M. [4 c- a
vector<int> v;
7 n3 |" |1 q/ M) W9 M sort(v1.begin(),v1.end());
" o9 p1 f/ ^" {& b | sort(v2.begin(),v2.end()); # G9 R$ a D& n. u' k
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ n: N% T0 q7 f* _, d
return v;
+ U5 T3 a* Q0 N4 w}" u' I: R; p3 V3 l. c0 y$ U: v
5 H" a) u1 y% ]6 u) u//两个vector求并集
% r7 R* h7 {- P Mvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
0 N, {5 m2 H2 r" E1 w vector<int> v;/ ]; L& i; k% s$ I
sort(v1.begin(),v1.end()); . @* x5 J7 R7 I" h9 l1 q
sort(v2.begin(),v2.end());
8 H- l: h3 i5 J2 ]" D9 Y7 b8 I set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) ?6 d8 L' J) ]7 _ return v;6 r* v, \+ f, i# J
}9 Z2 U* |, v/ R$ ~# W- m5 ?* S/ x
6 Z5 e- K6 W K
//判断vector的某一元素是否存在
* `% z: k7 g: s7 U: ?! g6 Sbool is_element_in_vector(vector<int> v,int element){4 f m) F- m" _ W* L
vector<int>::iterator it;* k5 s/ c6 S# P/ ?1 j
it=find(v.begin(),v.end(),element);7 x$ O3 \3 k3 u' @( N2 P
if (it!=v.end()){
! O2 `3 ^- R& t5 f" M$ [/ @ return true;
1 ^0 P: [0 r$ | }# J8 W8 Z7 x6 J. @
else{
/ O+ j9 g m! v1 \. i7 V' q8 z9 k M return false;! w" s2 S! p7 r7 Y
}
& s$ m$ X+ {/ x. C$ I3 a}1 j1 G. B- ~6 m0 l% T/ \
" A2 b/ W% a. a3 T, A
int main(){
4 F* f; A! l4 n \ vector<int> v1,v2,v;5 d: G: K: C( C: W1 C* `0 M
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
( X& r; V7 Z( A cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;. [$ }! C/ C$ J
cout<<"对v1去重:";
. C; p3 G0 E% h* p' I( e/ H v1=unique_element_in_vector(v1);
" I9 N7 j. p$ |1 A9 x3 j) q print_vector(v1);
8 [" {( e; ~1 a/ i cout<<endl;3 d; M4 k# R: \9 o4 k
cout<<"求v1与v2的交集:";5 s. o( Q* {) O* x4 K
v=vectors_intersection(v1,v2);# t# O% T3 J9 l
print_vector(v);4 y6 A) G# k0 h1 }3 b% Z
cout<<endl;1 S5 y) ?, A, T/ H1 h2 ^
cout<<"求v1与v2的并集:";/ Q/ c D# x" l# f
v=vectors_set_union(v1,v2);) s U% \ N! p: P. G5 l' E
print_vector(v);; i2 E4 e' V" w0 X
return 0;1 K) H& l9 i! v* f5 U- w' ^/ [
}[/mw_shl_code]2 j9 T3 h3 k5 V+ W1 w* S0 g1 b
|
|