|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: D2 S4 T. O4 N; q/ }
2 F; V! ?5 Z; M0 T8 L y5 D
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
% Z8 N- B0 S9 o0 n[mw_shl_code=cpp,true]#include "iostream", w! J8 e! Q& G' }& O3 p7 O! P' _
#include "vector"
8 o. ~- L0 t w& g7 X9 p#include "algorithm" //sort函数、交并补函数' ~0 f0 Y+ K0 w. d3 ]0 e t
#include "iterator" //求交并补使用到的迭代器0 H6 y( S% ], c! M' ]. J
using namespace std;
! u5 c* \1 C2 _1 G' A/ [ + ~( o$ i1 T+ t
//打印容器vector3 Y, A0 L( Y' x$ k+ y3 a3 [
void print_vector(vector<int> v){# a- G; W6 x: z5 ^
if(v.size()>0){- p" A1 u' @' W x
cout<<"{";
3 y I" H4 {5 B; g1 [ for(int i=0;i<int(v.size());i++){
, K$ J6 W0 q% W2 S cout<<v<<",";
/ U j; z2 X5 U b6 ?% p } / e2 T+ i& }' u; J$ y% a H" C
cout<<"\b}"; ; ] Z! _3 k" ?% J* M1 n. N+ C
}
/ S+ t2 y8 ?- F& w else{
5 {" ]* c4 r0 u7 m% a2 [ cout<<"{}";* a6 ~- W8 g4 b0 A
}
9 N$ _0 F7 C o; v1 A5 r+ B}
R# \: {2 U% ` 8 i+ S# ^ h1 k- g" o" Y3 C& N
//容器vector中元素的去重
l! a( q6 D, h3 k$ z2 @vector<int> unique_element_in_vector(vector<int> v){* b1 a4 k; ?6 A6 q
vector<int>::iterator vector_iterator;8 y: t5 s/ V1 g
sort(v.begin(),v.end());- F, b1 |% ^3 {" p% s6 ?
vector_iterator = unique(v.begin(),v.end());2 J7 `# f4 ^% m1 S, Y
if(vector_iterator != v.end()){
, v( N. A1 q. u- i9 V v.erase(vector_iterator,v.end());; J: ]$ R- i9 g9 r
}
' O3 e: R1 I, h return v;1 C# h" V8 u; s# b
}
- g+ y4 B# ]: L% q M 3 ~) N D9 X' C' B4 g# k
//两个vector求交集4 t5 E' v# K' U) {1 x. H5 p
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
: a6 K1 I( r& a N0 L8 Z* x vector<int> v;
# n: c, k4 F: u, K; b- X sort(v1.begin(),v1.end());
) J2 f" \" T$ w8 r sort(v2.begin(),v2.end()); . T3 z# n$ k+ b+ t: x$ S: `+ N' _6 U6 S/ F
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
9 a4 `9 X8 K* K8 ^( |! ]( g5 n return v;
4 Y9 q+ o3 Y) e, j* y( d}3 a. g9 `. V6 l) z& S' Z) g
7 L7 E4 P* R. c5 \8 U0 ?. Q//两个vector求并集
% ~- `. S: S9 Ovector<int> vectors_set_union(vector<int> v1,vector<int> v2){$ C* J9 Y3 S3 _! L1 t
vector<int> v;0 V( N: M7 G8 K3 Z9 `! G' c7 b
sort(v1.begin(),v1.end());
7 T! l( o% q$ n* d sort(v2.begin(),v2.end()); # g5 R9 y* o5 i/ o& i; k6 p
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
4 n/ b# I8 x3 f7 H return v;7 D" x: a N8 {- O$ H1 P I3 {* [7 G
}0 ^- Z# M' B5 X6 E4 ^, e* v+ q
( `9 ?8 m4 Z' w( ?//判断vector的某一元素是否存在8 |4 I+ S8 u: N2 X. M
bool is_element_in_vector(vector<int> v,int element){
$ r. C/ X$ ~3 U# h+ X z) C9 N vector<int>::iterator it;
, ^$ P! {; Y$ U+ K; Z# [" s it=find(v.begin(),v.end(),element);4 m; t4 H4 r: {) O$ U' N
if (it!=v.end()){9 d( y# p/ [, w0 Y
return true;4 E% F, _9 T8 k: Q
}' M* j7 M0 c9 b( c3 z
else{% U& ]9 U7 \# b& D. I* `" y
return false;
/ Y% a+ ?4 ~7 m) D }
6 A6 p! ~2 q, z" d8 m# V4 k}
: [ n _; _ h C$ ~6 L
& Q1 I0 K' p( u& A: `int main(){* J( R2 N$ Y9 a( F' x- y
vector<int> v1,v2,v;
! T2 o7 u, @ {9 C; o# G `8 t v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
! S7 a7 f2 I$ y! B/ M. | cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
) K, S1 J1 P1 ]8 O$ a cout<<"对v1去重:";
1 I4 A1 G- N. w% z3 d; K6 g v1=unique_element_in_vector(v1);6 \. x9 ^% E) h; h2 c
print_vector(v1);/ c$ U ^ h# G1 G; r: n
cout<<endl;2 g. Y$ r* G; l# A5 g
cout<<"求v1与v2的交集:";
( E5 r c1 d1 }8 U* ~, e! C v=vectors_intersection(v1,v2);* _" A5 O7 l2 O! T7 Q
print_vector(v);7 y" P B7 S% S* F: q( y) Z
cout<<endl;( @; Z6 C1 U( e# C5 ~
cout<<"求v1与v2的并集:";6 V! m3 ]6 M1 ?" t$ f( j3 d
v=vectors_set_union(v1,v2);5 Q/ h- w6 q6 n" k
print_vector(v);( p% v' e7 }' f9 M
return 0;+ D) B2 U* ~) n/ u7 _* l
}[/mw_shl_code]: U# J( F+ H5 H. v. u Z' W y
|
|