|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) K! b+ H ?5 T( D+ o
6 t" N& G* W# F+ X% q6 QC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:9 t2 l. V7 ~0 l0 N8 e; X
[mw_shl_code=cpp,true]#include "iostream"& O1 [: B; j* m6 y5 Z
#include "vector" - m- ^% r# X) w: W
#include "algorithm" //sort函数、交并补函数 g2 h) ]& q8 n3 U W; |6 P1 v
#include "iterator" //求交并补使用到的迭代器& I( r$ r) J- ?& S; U( F, W
using namespace std;4 h+ h1 T, P( q- a0 R
/ M s- l4 q3 z# H//打印容器vector+ x$ A) @" @- y4 V+ G7 Z' U6 a
void print_vector(vector<int> v){
. Q, L7 T/ O2 z- h; a4 K/ H! H6 e! w if(v.size()>0){
% G" O& g+ d3 T cout<<"{"; + [+ Y$ b9 y( X; r0 Z9 y
for(int i=0;i<int(v.size());i++){ * a4 G. F2 a" m7 |9 y4 I
cout<<v<<",";
4 `( ^# _. H( H, I! G }
: s/ d' `' Z7 {& J4 } cout<<"\b}";
: L- c4 ?' I3 E( N6 F1 h+ L: E }# W/ C# u0 k9 P) A
else{, t% d* [; ]5 n# f3 I2 |, I
cout<<"{}";
5 r U( R( n! P( H0 d8 t }
) {+ j- M1 G% y}
6 u" I/ s/ i% Z6 G% M- z4 X4 ~
0 K$ h$ N: ^( w! [, r. y//容器vector中元素的去重5 u1 ]' d f% F
vector<int> unique_element_in_vector(vector<int> v){/ @. X$ |% X, [& _% _; H) `- y
vector<int>::iterator vector_iterator;4 W; B" `) t; l' A' M8 p1 e/ a
sort(v.begin(),v.end());
7 W( w' R& h% T1 c% E vector_iterator = unique(v.begin(),v.end());( Z( x5 u, i7 B( y* ^
if(vector_iterator != v.end()){
' l E% }- S% u" | v.erase(vector_iterator,v.end());- e/ A) ~. h, N& s( r
}
# A3 c+ C( P+ l. D1 B return v;& d. r/ T! D! F4 Z* Y/ ]
}
, j4 W: K0 |+ g3 ]( }! ]! U# [
+ ^& \0 c: J0 l* D: _ ]* V//两个vector求交集
# a m/ b# s6 y" [. svector<int> vectors_intersection(vector<int> v1,vector<int> v2){5 r( f; D8 i! o! y/ r0 |
vector<int> v;, }. m! v1 K7 s* W& G
sort(v1.begin(),v1.end());
4 b9 D0 Q& S3 H/ _% [6 N9 `; f sort(v2.begin(),v2.end()); 2 z4 U5 n x1 X* E7 k$ h. i
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
, E1 a, K/ B2 z8 s3 z return v;. T/ Z! Y, ]& I
}
* e. g. K' i3 e6 F! i/ K ! s4 V. Y* O3 N5 M2 N$ J, q
//两个vector求并集, P- n' \ m6 G/ E. l
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
" X$ x0 k8 [; O, N1 U vector<int> v;: C! c9 F; J% r
sort(v1.begin(),v1.end());
3 l: c, [$ g" i8 U; _" O8 C9 S sort(v2.begin(),v2.end());
( }& x) g) {' _ set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 , Z3 r* A9 x& C8 B6 P, s
return v;5 j' C5 V1 u6 H( l" `
}
2 N. \) l- d+ S) {
8 I7 t$ _7 r$ L" I5 I6 U4 ?//判断vector的某一元素是否存在; k# D3 {* M- q1 \' x( m
bool is_element_in_vector(vector<int> v,int element){
R2 c1 G7 P+ ^8 @ vector<int>::iterator it;
, |( i, v* a# {) J1 T! n# f it=find(v.begin(),v.end(),element);
; U- G' [5 F1 d+ }7 L if (it!=v.end()){2 |& V5 {3 ~5 k9 L' p& x/ x; k$ h
return true;0 k, G: V! G5 @
}" c1 j$ e/ S$ [. u) T2 H( {" \
else{
* M4 y1 t8 c3 H1 q! M return false;( x/ _5 ?( O7 ?, ?4 ^8 O
}! P# T5 I* T+ P9 Y) T- G
}
# w3 K4 S) P# r" i- p: J2 [ 0 G( [8 C5 Y# i3 {! M% f b
int main(){
2 D5 J: ], }* S" z8 |2 ?) F( Z5 b7 i vector<int> v1,v2,v;
& ~3 ~+ C9 x$ I3 k% r3 C v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
; J E1 O1 h* C+ z6 P cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;! |5 s; a5 ?5 t: Q1 b* r6 @: S7 g
cout<<"对v1去重:";+ O6 V7 q: C% p+ n- y y& Z) C
v1=unique_element_in_vector(v1);4 T" l* ~; p3 b+ j D6 c! x
print_vector(v1);
j \$ [4 l3 L; |2 w2 r cout<<endl;
7 a3 A& Z2 A6 ^# b0 \. J# t cout<<"求v1与v2的交集:";: G4 A' F( b( t
v=vectors_intersection(v1,v2);
6 p8 ?+ W$ |9 J9 N print_vector(v); r0 g# e9 V( A1 L" f- k. T( C
cout<<endl;4 G- S* F& q( J# S- C9 j+ b. K" L; D: d
cout<<"求v1与v2的并集:";; y2 |. N( f+ J9 k' _" @+ I8 E
v=vectors_set_union(v1,v2);
; A: O+ t7 k" Q8 D0 Q- w7 W. f9 c print_vector(v);
. B g6 P t q% N, v! ~ return 0;
3 X2 ^$ h, O5 i; S" b; Z1 U0 d}[/mw_shl_code]6 ^0 T V3 j% E6 |" J# q
|
|