|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
. |0 |. N/ s$ u( |# M! s/ H
; u q8 L3 `( RC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:7 E* u8 ]2 l [% P
[mw_shl_code=cpp,true]#include "iostream"& l% s+ O0 S" z
#include "vector"
$ R: U+ h9 O7 V9 o#include "algorithm" //sort函数、交并补函数
1 {# X3 Q0 _& A- V; H1 q#include "iterator" //求交并补使用到的迭代器
# O+ t9 {) M4 y# \using namespace std;
4 S/ c% D+ X- z* i. q8 u ' y0 p5 o# G, U% ]; G' D
//打印容器vector
5 g8 D- ~) D+ C! Y1 S3 z8 evoid print_vector(vector<int> v){
% U n& u3 V! o1 a) x# W if(v.size()>0){
7 p) ^ E1 S0 k1 D( U' T& b1 d cout<<"{"; + v# V* p' Y& l6 z6 W e2 p
for(int i=0;i<int(v.size());i++){
& ?4 M& r, i+ |3 Z cout<<v<<",";
% f5 ?" T4 {/ T, P: s9 y- k$ b }
/ W8 I: \ k9 z cout<<"\b}";
2 i9 e+ _7 b i2 `5 X2 ~ }
$ H: T" \" B/ D else{
3 R( I5 V: r0 W2 }1 ]- g j cout<<"{}";" Q9 H2 g8 D, a% Q
}, H' c$ `1 G. v$ P6 u; x8 r
}3 D9 K, ^- z# s3 u! I
0 @. _& [5 V: d6 q6 A% h//容器vector中元素的去重. c7 q W- Y' f5 H K% v: S
vector<int> unique_element_in_vector(vector<int> v){
1 C. g0 t- u* `0 P& [; I# o+ B vector<int>::iterator vector_iterator;
& W7 P8 ^$ c' g& C1 H$ P5 R+ N0 B sort(v.begin(),v.end());7 m! t3 p- P, _$ {4 ]& J' k
vector_iterator = unique(v.begin(),v.end());% ~7 @8 K7 s' |
if(vector_iterator != v.end()){# {1 f; z8 C3 B& I
v.erase(vector_iterator,v.end());: r |4 e7 }/ f; k( r' x; j
}
+ t4 _# d9 H& E* a- o8 |. G return v;* P7 a8 L/ v1 J6 d( i' J7 `$ i
}. l$ }$ A' Z; @3 ]
1 g8 Y% e% p# h5 o( s//两个vector求交集9 c6 ^! d+ {/ w: r! J: N5 l
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){0 G* Q1 k! V; N
vector<int> v;
8 D' S4 y ^9 v/ B& d sort(v1.begin(),v1.end()); . f" Q! R A; w' T3 ^1 W# v
sort(v2.begin(),v2.end()); 9 V+ F! y4 |3 x! E. E
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ) Q+ V2 s; X/ g# ^6 w3 n/ E
return v;" L, m1 N8 j. Y- f" s
}$ y6 d: C( H$ |. z% e3 b& W; R
5 m+ D: H2 l& c0 P9 x8 A9 O5 c
//两个vector求并集
/ M% Z8 p2 v" F( Dvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
* _; e" e+ Z5 [ vector<int> v;8 `1 G4 z5 y3 k0 y) `6 E" N s
sort(v1.begin(),v1.end());
7 d! r; t3 ?6 E7 v0 c' v) a3 X sort(v2.begin(),v2.end()); . q2 i: p' {( M9 x
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
' i; P$ ?! u5 i return v;
* I. Q0 p* Y/ c) U9 M) @; N}. X! f0 _ H! z
2 V. D+ f$ C$ k8 \" f//判断vector的某一元素是否存在. _8 E# n: m& r. ~
bool is_element_in_vector(vector<int> v,int element){
3 H. H) e& `5 [. u vector<int>::iterator it;8 T# f! {' R- U+ K0 l1 G+ e4 k
it=find(v.begin(),v.end(),element);
$ `7 `! u* g; C* U& b7 H/ @ if (it!=v.end()){
$ W% w$ K# `0 l, e% P' u/ M% \" w return true;
8 r0 g. K, x. R& }$ g4 G1 i }4 l6 C+ C, G* u1 M H6 k# @
else{
+ _/ u; w) ~* ^3 E return false;2 C. W1 ^( V6 x
}1 w( _! m0 u# t9 E3 l% r
}
% k+ `$ e0 b( \1 U1 N
5 L) X' c7 r! V; Y8 ?4 g) u5 A# [int main(){
; I+ _* h) }8 |2 u" E' k6 U vector<int> v1,v2,v;
* o) ^; Y5 j5 N v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);8 l/ T% N, H- o) H7 w) c
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;$ c* V K$ Q5 ~# K0 x1 ~0 @
cout<<"对v1去重:";4 _7 T2 H& U: L# {: W: w* z) K n
v1=unique_element_in_vector(v1);
1 y" p, M9 m! j, Z9 Z0 S print_vector(v1);
- f% @% v2 m' ~, b cout<<endl;5 w4 f) p0 S0 {4 P h
cout<<"求v1与v2的交集:";
$ U/ t' f% g2 n8 T v=vectors_intersection(v1,v2);% m) s: i# M3 e4 T6 x
print_vector(v);
x* H6 l! s9 k& z cout<<endl;
/ v& P) q! r. [5 T+ F+ s cout<<"求v1与v2的并集:";
% X/ B# K3 O% V: L1 D+ Y* ~; Y v=vectors_set_union(v1,v2);
' p5 p: O1 {, J2 B print_vector(v);
$ }. y% h! v# S9 L( S% _7 h& A return 0;; p# z* f3 P8 _; ?" o- ^4 _
}[/mw_shl_code]
: n+ {& S q# S; Q+ [2 T |
|