|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: E$ u! n+ ]8 b
* q6 r" @) E$ LC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:- ?% D4 V! Y' _7 @
[mw_shl_code=cpp,true]#include "iostream"
0 K3 E) M; i: g d5 j: T! D#include "vector" ' f" n' K; t0 L- g) i, m1 O
#include "algorithm" //sort函数、交并补函数
4 E' |* p, y9 p+ }* s#include "iterator" //求交并补使用到的迭代器. n* I' }) ^9 q* }4 ^% }+ i
using namespace std;
$ v# c/ p1 ~) p/ X
1 k! C! h# K2 s- i//打印容器vector
" K% W% U. B- M# I* avoid print_vector(vector<int> v){
* {* C* Y# D( j$ x0 P if(v.size()>0){, k u! O8 |& w# h4 f8 y C- k
cout<<"{";
' K$ Z5 E: t/ ?/ V$ i# V for(int i=0;i<int(v.size());i++){
( s2 Y: C* Y h$ j. ^$ G cout<<v<<",";
9 I+ m! x- C( {; d3 G }
4 f' E* L* l: e. w cout<<"\b}"; , g5 A* u* h0 r+ c& e& F& u7 l
}
@( C5 u: T o) g! u9 G else{
4 z+ A$ o, Q9 {% ~: D cout<<"{}";
$ |8 v n: D4 Q2 O1 ?6 j3 L/ s }
! |; h9 S: v" r}
3 }4 g9 w N8 q" z" s* T) \3 O
2 ~- `5 h$ b# u9 e0 S//容器vector中元素的去重
; m) b6 r& Z% j8 V5 Bvector<int> unique_element_in_vector(vector<int> v){. c) e" d7 Y% k; }) N
vector<int>::iterator vector_iterator;
: {( G: O1 |: d4 h, B# V9 k$ Q sort(v.begin(),v.end());4 z0 b+ F7 [. s& ]: c D
vector_iterator = unique(v.begin(),v.end());
# \. h! @5 r8 ?: s if(vector_iterator != v.end()){
+ s$ d! T1 l/ t9 D v.erase(vector_iterator,v.end());
8 p+ D6 t9 c( |/ Y5 e8 j }
# G! l) o- K0 C/ R' i( W2 F return v;
2 A0 _. D+ N+ m& Q/ h} Q3 L5 @1 Z) f3 v
7 m1 c$ F9 t2 z5 Y- ~//两个vector求交集3 b) L+ P8 V( [
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){) G: Q! p0 e+ z/ w
vector<int> v;
; B0 X" `4 u3 A8 R- ~ sort(v1.begin(),v1.end());
* ? v3 L4 W# H sort(v2.begin(),v2.end());
) K/ o, c$ e1 h; t% B8 U set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 + v/ Q- Z- j: H5 _: n5 \
return v;
0 @! Q/ A8 i- T/ w}
; d7 @+ w* c% Q# D4 y# q1 f 3 [) G6 x! ]$ W
//两个vector求并集9 ^- D' P+ J5 N* D `1 d! }8 ^
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){7 F4 V& Z$ W: f$ p( x8 F' X
vector<int> v;
: g# R/ s" C3 g. Z sort(v1.begin(),v1.end()); . J0 Y: s5 g' n0 m! ?
sort(v2.begin(),v2.end());
- T5 K/ O0 K0 ?- c! }& c set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
8 F8 p2 O |2 L8 d return v;' w2 O- p: r4 j9 A
}8 T! H. E) b$ F' u. ^7 Y5 n
! F2 ?: W, W% `* ?, A) ~! G
//判断vector的某一元素是否存在' a* `; ]4 B9 w) G! _
bool is_element_in_vector(vector<int> v,int element){
5 l: r( M( @0 e4 D% S vector<int>::iterator it;) E! s8 N: t8 R
it=find(v.begin(),v.end(),element);
- E- v& p6 T! K/ g if (it!=v.end()){; b# j* w# Z% o8 U$ n% a [1 |- w! m
return true;
3 t* i# p- @8 S- v" _ }2 a } z, x2 K2 c" w! ~9 F
else{5 ^4 B) y, w( n: n8 Z* b; I' A
return false;
( Y' J5 F# S9 @ u }* F0 x" P% k) c/ `
}$ `; l) c/ H0 k7 _
6 n1 x- j5 f) Z, t* j! ?int main(){; v% r$ z9 H) S4 G/ ?
vector<int> v1,v2,v;) o% e! v$ G& L
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);: w* w! |" h: ~+ c2 {1 _5 R4 L
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
9 L. @+ ^7 d. c4 v* `4 n cout<<"对v1去重:";
, p! `6 Z- Q$ y3 |) s. c5 X! O* a v1=unique_element_in_vector(v1);6 D# [7 }- |& S9 l; L( B: k; D
print_vector(v1);5 u( e: }. C" {+ U
cout<<endl;
/ g% D6 j2 i" A: u4 u! }- m' \ cout<<"求v1与v2的交集:";# C) M6 N: ?1 r6 R# V" G6 @! a
v=vectors_intersection(v1,v2);2 ~2 P G. B# U" ^. T" |+ k
print_vector(v);! d- a+ E2 ]& r) U) e; P8 g
cout<<endl;
; O. f* r! `/ F' H# @0 Z cout<<"求v1与v2的并集:";1 { c5 w) j8 r, y( Y
v=vectors_set_union(v1,v2);
+ u/ L2 R6 W* `7 U5 b print_vector(v);) w3 w* {4 [- B0 } D- g9 A
return 0;- C- A1 J, w* @% ]2 j% J
}[/mw_shl_code]$ g9 `7 n% ?* R0 K( B7 J8 O1 i# r
|
|