|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
0 P6 @5 `: b6 U5 q6 X: @; \% U
t: Z4 _ F( n; S9 JC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:- k8 A' i2 a5 u% c
[mw_shl_code=cpp,true]#include "iostream". a+ R9 ^( A# \$ } e& b8 j/ V& x
#include "vector" * |3 K' h% ^6 n) v0 y. U# ]) ]
#include "algorithm" //sort函数、交并补函数- l8 I p% Z9 e: v0 H; z1 a
#include "iterator" //求交并补使用到的迭代器" k7 V _. E# q, T+ s
using namespace std;
- g4 s6 ^" l- A* p0 G 8 H% L) Q& q. \6 M" f* @
//打印容器vector# a6 A% I e, X h, d/ [
void print_vector(vector<int> v){
! }( W: ~+ F0 {% i7 o, v if(v.size()>0){
3 ~) i2 z t- P3 [! Z$ [ cout<<"{";
7 C6 f7 {2 G% G; K for(int i=0;i<int(v.size());i++){
9 D4 B9 X8 [+ P: M& l- r" Q/ q cout<<v<<",";
# f( ]6 G& I3 r$ K# x& x }
/ k Y7 H, H* p# Z( q$ w9 A3 _ cout<<"\b}"; 0 {) ~! R) u* i2 {1 n
}& t% ^1 t" a) w: x
else{
2 L' M% m! O' A% l6 l. v* K cout<<"{}";) v6 O; q! I; Y) b: }( c* G
}
/ v R' F# y2 W0 i1 N4 p}
' F5 [3 y! U+ S: ?9 o! S, L6 K. Q 8 Q J; c; c- r, S; x8 J, Y& }# N5 T e
//容器vector中元素的去重' c. `: ~. S, [! Y
vector<int> unique_element_in_vector(vector<int> v){
8 O( { U2 \5 x, _: c( ` vector<int>::iterator vector_iterator;
# Z% N/ n: d" W6 U sort(v.begin(),v.end());
% Q& r4 x3 E* C( J/ B% A5 A vector_iterator = unique(v.begin(),v.end());6 O6 A! T# A8 Q9 Y; S: O
if(vector_iterator != v.end()){& \# L! ^# w9 D$ L+ e
v.erase(vector_iterator,v.end());
. |% N& R* r: k% e4 `3 u. r& F }- ]7 l0 N3 H9 @2 f; u+ `
return v;
* `9 G, ~+ R' q2 S( G5 Q}
. e# R: H! i( z( k* i; o4 o 8 D( N- K% @9 x; | F& `
//两个vector求交集
/ u2 d( }9 T" d# O0 avector<int> vectors_intersection(vector<int> v1,vector<int> v2){& ]# _, Y) G+ Z- s
vector<int> v;3 n7 p5 B0 N, f1 [
sort(v1.begin(),v1.end()); - H4 S: w- o0 D6 L: H
sort(v2.begin(),v2.end());
$ i* }$ {3 t/ @2 M# H/ @ _% ?4 L* U set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
! O% _4 W/ g2 B9 y return v;
! t0 O. ]; M$ k8 x( V}
- ~/ `4 N/ K2 }" q. q
0 t2 Q3 v& i! w4 x& Q1 B: G1 S//两个vector求并集
+ v4 j8 L4 q! ~vector<int> vectors_set_union(vector<int> v1,vector<int> v2){( {! Q& @3 G' R. g, M
vector<int> v;# ^, A' h/ V# K: a
sort(v1.begin(),v1.end()); - Q# P. N0 I) r1 U6 `: w
sort(v2.begin(),v2.end()); ! G7 o: d' X- }) }4 v- `
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ B0 Z y# _3 r( h0 ~
return v;6 U, _" f& [8 g2 M* K+ Y
}
8 e( Y" v1 z$ B" y# F+ k
0 b ^, X8 v1 }7 _' T( X. ~/ Z//判断vector的某一元素是否存在
7 G( y$ X% j- l% R6 S$ {bool is_element_in_vector(vector<int> v,int element){, Z6 G& q% Q; v* b: d7 j; X
vector<int>::iterator it;0 c5 f3 ]2 Z8 G* W1 c S
it=find(v.begin(),v.end(),element);
' @6 u! r! o- n4 B7 Z if (it!=v.end()){: H; g" o7 b1 r* w. u5 R4 _' X5 _/ f
return true;. W8 w% T6 N# k6 }: f; h9 V k) c& d
} G B. h# O& M/ p7 U8 I; r5 p
else{
4 g6 O% N9 b1 B4 h& I return false;- `( d7 y. M" N6 w
}& S" L) ^8 E1 q- n9 g+ F( V
}
2 S' o7 m* q t. h# l1 r $ w5 Z3 _9 L; Z3 t' i- W
int main(){' t: i0 S0 i+ E% |, N w* T
vector<int> v1,v2,v;
$ z! C1 _* |* w/ a v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24); U6 K# I9 S# ]9 d$ L1 s3 _$ {, Z* M6 @
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- A. A9 w( s2 B
cout<<"对v1去重:";
4 L9 `2 c/ p1 m# m8 ~ v1=unique_element_in_vector(v1);
& E' q$ I. R& ^7 w( ?. l print_vector(v1);- p" P* _9 U* d
cout<<endl;& w5 _. P" y. U8 ~
cout<<"求v1与v2的交集:";
# R& w) [* ?! o4 ?2 L9 P5 E v=vectors_intersection(v1,v2);1 z# B% l% j& q
print_vector(v);
. i" l d- o' L( P6 X4 \& Y cout<<endl;( j* O; X, }: ~; O( c) {, ]: i
cout<<"求v1与v2的并集:";
7 f/ E+ T x! V4 \ v=vectors_set_union(v1,v2);) b' e1 r9 y- h. m
print_vector(v);
1 }+ [$ s% _2 s4 W' K/ p" T! E! ]7 b return 0;
! T0 B# W8 Q/ _: j}[/mw_shl_code]
3 Q( d; W" [# } |
|