|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
" s: O# K8 C0 {/ j
# x [6 x+ y1 o) {# a
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
: L. O) W2 f: ~% G[mw_shl_code=cpp,true]#include "iostream"
5 F0 h' d& t% ?) j2 L) x#include "vector"
' C" v: W M- J1 [#include "algorithm" //sort函数、交并补函数
8 |$ {. z7 l" _3 E$ {7 }#include "iterator" //求交并补使用到的迭代器
`, }; ~$ Y8 ausing namespace std;. q% F1 K0 M1 e& ^% X
% e3 ?' N3 n j. ^//打印容器vector# Q5 M8 |# L( W( Z2 p- F9 V) T: K
void print_vector(vector<int> v){
. @9 X) z5 y. n# e if(v.size()>0){
1 F; o' _6 E; Q' K) Q- u4 g cout<<"{"; * u: [$ m7 w1 ]' W
for(int i=0;i<int(v.size());i++){
# W8 I! l" B" N0 E cout<<v<<","; 4 I# s1 j2 N/ R/ c! ~' L
}
9 \- ^5 U. x9 h: W; M4 \3 h8 \ cout<<"\b}"; : ~+ Y( a2 q2 u' s
}
7 l9 a$ v4 N; ?: G% ^0 j else{
! s6 D$ |& e" { cout<<"{}";
* _' R$ S+ U, \* o( P }
4 Q0 R, H( @( v}
) N0 H d1 |5 w+ [
0 K# B& F# Q, i3 ?% g9 p//容器vector中元素的去重8 L% { m$ `5 ~* E; N) K7 r3 |8 F
vector<int> unique_element_in_vector(vector<int> v){
& j% Q0 T& ]; t( x vector<int>::iterator vector_iterator;
$ v0 `, r0 D( m- z& g sort(v.begin(),v.end());+ u( A# Z# `* @- R" ^
vector_iterator = unique(v.begin(),v.end());) c$ z; ]8 V, p; r
if(vector_iterator != v.end()){1 t0 c3 N1 T+ ^3 ^! u
v.erase(vector_iterator,v.end());2 L$ k3 ~3 ^$ }) D7 I: Z8 w: V
}
9 b6 X# @9 e" a, g1 U# Y+ Q. } return v;" S6 U9 X( _* _
}
! S2 _% A, V, G/ `
x" J2 q% O. x) k) W. U. D$ v//两个vector求交集# a) a+ T, ~( {# k
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){2 m7 f, B9 y- q9 p' w! D$ Q7 Z$ c
vector<int> v;
7 b [* l( v% ]6 I2 ? sort(v1.begin(),v1.end()); 1 l5 e8 _9 I, F& V, T
sort(v2.begin(),v2.end());
2 f' q: `' L1 B3 S0 r9 d/ v' X; h set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
! l7 M6 d0 n7 {% a return v;" h- [. O* H9 g- e! W
}
5 I; {; i Y+ @ , i r5 B! z9 X- S: n1 p5 |
//两个vector求并集
- B( }) _" v% vvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( |7 D8 u9 ]1 n vector<int> v;$ r. l; x2 D2 [ D
sort(v1.begin(),v1.end());
9 q" E N9 F% n( w9 b sort(v2.begin(),v2.end()); ; d" R; r2 u4 b4 E" f) M9 ?8 m
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 J' A' y* u/ K; D3 \0 \% v return v;
8 _" g7 A. N, n Y}; B+ F+ `: G* b9 ~; d/ |' [' n0 }
0 A* G; |5 ^+ r9 l* T//判断vector的某一元素是否存在 m, x( ~' Z1 t% G5 l8 o f
bool is_element_in_vector(vector<int> v,int element){+ i+ ^8 c& [- v
vector<int>::iterator it;
7 j5 }1 B9 ~4 R0 s it=find(v.begin(),v.end(),element);* e& O+ M1 s% a6 h- G9 {
if (it!=v.end()){
9 i! a3 z7 k6 z return true;
% ?. M9 G- F7 f. \, H% O, p }
8 ?% L A" B1 i+ G& a( @9 K7 {# H else{* t- X( V% s% O2 d f7 L8 @! Q
return false;
( O1 _, S. g( i+ y# x4 ] }- L- ^( D% K9 x0 n% x) m |
}, [ U( f- v7 v* a9 B
: C- c' w0 v2 T( M, \" E
int main(){9 O, a" [: I; |9 z
vector<int> v1,v2,v;
5 L" ^5 ^1 Y% N" E v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
* Y" L3 ~/ v2 B. c) {2 }0 I4 W cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;$ [# F: f! E# `! f: ?5 q. D) y
cout<<"对v1去重:";
0 P1 ?3 Q$ d" V" V Z2 g: t v1=unique_element_in_vector(v1);
8 Y- t/ I' | m( ?0 Y3 Z print_vector(v1);
8 H' U( O. J- z7 v cout<<endl;
, L$ c/ W( T5 D& Y% h cout<<"求v1与v2的交集:";+ R2 {- |+ }5 f
v=vectors_intersection(v1,v2);$ y' a7 s' v7 C: B* l$ o0 g+ y
print_vector(v);
* U9 E9 ~) S1 }- h. p cout<<endl;
: P, b4 h# N/ N% g* c& a cout<<"求v1与v2的并集:";
, B; T' C g5 o v=vectors_set_union(v1,v2);, \: v9 \" g8 t% Y- L; r% w
print_vector(v);; `7 J6 M" }: E3 P, ~! V0 g7 m
return 0;
: F8 q5 W, u9 L; Y" a, V9 M% \}[/mw_shl_code]
# R- V& q! A! @. w6 J& p |
|