|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
. F& a, _! Y1 A8 g% Y6 y$ B6 i
7 b$ x) T8 ^8 G( q# |: z7 r. A
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
6 v4 m1 ^( n" m3 P[mw_shl_code=cpp,true]#include "iostream"- n" R2 K! @( J2 {
#include "vector" d9 S. x. {- Z2 y1 w7 h! p; ^
#include "algorithm" //sort函数、交并补函数
0 s' N X& ~$ w; O8 a#include "iterator" //求交并补使用到的迭代器! F8 ]) H( ~5 X
using namespace std;: k# N" H4 o8 A" q! m, O; ~
A O4 b5 H4 [2 E1 m//打印容器vector
' n) q$ @5 u9 y; b( hvoid print_vector(vector<int> v){
9 z6 p" L* Z; J% J L6 S4 i2 D% | if(v.size()>0){
i7 F$ B! m- g cout<<"{"; 7 n1 `: l2 L f7 P1 \ W ?8 Z4 F
for(int i=0;i<int(v.size());i++){
2 @% E7 B# z" o6 k, e cout<<v<<","; " I9 a* o" D! j2 m4 U
} $ c. K6 ~4 B6 S1 l
cout<<"\b}";
6 h3 H+ a% {) D) M! |7 D) H }* H' [6 \) s/ [) f# I& B
else{* A' Z2 q+ W4 n2 k* U* y3 j. n
cout<<"{}";
) m9 a5 g6 H$ i8 S) {/ O' u }
( \" ~( v" b- v4 v0 {}
( [& Q4 e$ A8 G c& D! T
. r# \9 m9 x, ^: _9 _0 @//容器vector中元素的去重
* D+ I0 b) j) Q7 K7 lvector<int> unique_element_in_vector(vector<int> v){
0 f" J( O* ~% F9 A1 L* y vector<int>::iterator vector_iterator;
- ], H' Q x# v! l( \ sort(v.begin(),v.end());
4 N0 y/ y. `6 {+ C vector_iterator = unique(v.begin(),v.end());
/ L) ^ F q$ ?+ Q m if(vector_iterator != v.end()){
: O: b* y5 s+ W- Z5 V v.erase(vector_iterator,v.end());& g' V) {. T, S1 p) I; P2 e
}
& Q. i; x" z% v return v;# o$ q! E8 U6 a8 j! t
}
. _7 b* [. X0 s, n- I, }0 r. A0 z- J# W * A$ v, Q; Z. b# {4 D
//两个vector求交集! M. h6 R H* r0 h4 S! O+ o% B
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
5 A7 q/ a `% u& e* s) ] p vector<int> v;
* N J$ Q9 x8 x; V7 ~3 x sort(v1.begin(),v1.end()); , Q( W/ m1 d) O7 f% \3 o- i
sort(v2.begin(),v2.end());
2 ^7 C8 e, L, O* g$ l: Q5 E. h set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 h6 M; L. k- A% k {3 @- n return v;
/ L- ]. ?* G* \, Y- `+ y" ^}
$ Q' |4 ~3 i1 W! C( i3 R
' j% c ]* I( e _" J//两个vector求并集( A" I! v3 G; K1 T6 \
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
- e# J8 H8 _3 ~6 ]0 @ vector<int> v;
2 |5 k9 D0 r2 H# {6 F+ Q sort(v1.begin(),v1.end()); 8 h- ?2 @8 i2 ]. |
sort(v2.begin(),v2.end());
4 {* f+ Q1 V( b* P& ^ set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ( K( L" F! a. W- I6 a7 _
return v;. ~" y- h- H- \$ w. Z3 D
}
2 [$ i$ E' P! W# h. F 3 }8 \! `6 V3 C) M! y
//判断vector的某一元素是否存在
- G. H1 G3 X/ d) ?* N% f7 Ebool is_element_in_vector(vector<int> v,int element){; h3 f5 j s4 f6 ?: ~* G
vector<int>::iterator it; q! M7 N% o5 N j
it=find(v.begin(),v.end(),element);, c5 p/ ]( O6 L6 Y
if (it!=v.end()){2 N4 T( _- I, i" |8 N8 K3 l0 i
return true;
0 p; u5 t) p+ q( f* P! D }
9 b! i+ ]4 l# q4 R else{
- j# D3 W! z( o$ {7 [) P) [9 Y return false;
* e0 I- U/ Y( Y# f4 T$ L* R }
. i8 g' E9 L) ?}
$ t" j6 D4 ~7 M0 g0 y & g; a# a8 Y J; R
int main(){6 h% d; d t. }2 q
vector<int> v1,v2,v;+ |/ W" i) i. i7 s( {
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
6 F: x2 \2 H x$ } cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- L0 S& y1 A8 H
cout<<"对v1去重:";' q9 z) A, |0 U* j2 u# ^$ s
v1=unique_element_in_vector(v1);: r1 K! C* y: i5 C6 U
print_vector(v1);* b0 N& ?5 D1 h1 S6 M" R, R
cout<<endl;& P( F( t" A$ H# G- o
cout<<"求v1与v2的交集:";( @) \" L/ a- _& P1 s9 t& a2 F
v=vectors_intersection(v1,v2);
0 e6 g1 y) B; N [. ?6 ]) D print_vector(v);
% v0 X5 B7 g: ?9 S% E8 X0 T cout<<endl;
2 `5 y- ~, ?. J% A, D cout<<"求v1与v2的并集:";
' s8 a Z. W. X% o; N v=vectors_set_union(v1,v2);) s# N! m i+ q
print_vector(v);
: R6 N+ B [; W return 0;, t/ A' U6 m+ U* m# I& }
}[/mw_shl_code]
- r" i: k0 `9 |; k3 O4 k4 Y |
|