PLM之家PLMHome-工业软件与AI结合践行者

[资料] 元素是否在vector中,对vector去重,两个vector求交集、并集

[复制链接]

2018-7-2 19:41:23 2502 0

admin 发表于 2018-7-2 19:41:23 |阅读模式

admin 楼主

2018-7-2 19:41:23

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x

* _1 [3 |" U! n# H5 w1 i
  @% ]& x! m- ~  I- M/ bC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:" _& T# W8 b6 z) v. ]
[mw_shl_code=cpp,true]#include "iostream"
0 j8 U6 C1 h9 K# }; w! W* i#include "vector" 3 E) I# E, V8 b. x6 T$ s# b, Z
#include "algorithm" //sort函数、交并补函数
& R9 Z" L, w1 v/ o/ t5 B  I9 i#include "iterator" //求交并补使用到的迭代器& g1 U3 s; Z, ^, }, K% D5 H7 X6 ^
using namespace std;
/ h$ x) R- `; K9 w9 @# }; _ ; r% ?9 M0 k! B0 z  c: s, J
//打印容器vector
' o, g( B4 ^" c1 U  Dvoid print_vector(vector<int> v){
5 r$ G+ t1 L/ L* r. r        if(v.size()>0){- d1 H  h2 m# E1 `2 ]" @  G
                cout<<"{";  
3 k- S" M; n' T: x6 v* l6 b' s                for(int i=0;i<int(v.size());i++){  
+ K; L- r) @6 {                        cout<<v<<",";  
0 U9 n3 T4 p% S4 i2 [                }  
6 O" V- J% f( S8 _' t4 T                cout<<"\b}";  + g' ~7 v  a1 ~3 C
        }0 i  X' n* I$ O7 G; R: [4 I: o
        else{0 {) w% n) i, Y5 R  n2 W6 I
                cout<<"{}";3 \8 f4 |5 F4 V" w" U* z) g: I; i
        }) H! x* a8 E) _* e
}* H% I8 [# a# U
0 I( N9 U- e" a, g( j) c
//容器vector中元素的去重' Q4 K0 z5 p; i. s: l; z% m
vector<int> unique_element_in_vector(vector<int> v){! [$ k/ H* ~# w. p) O7 z
        vector<int>::iterator vector_iterator;
. {% t8 x! K. R+ `3 d+ v+ v        sort(v.begin(),v.end());% l( E( I, u, I9 M' r, A1 H) W
        vector_iterator = unique(v.begin(),v.end());
# L4 {2 I! ?5 ~+ I        if(vector_iterator != v.end()){8 q4 Z4 e# J+ l* ^' m/ x8 Q
                v.erase(vector_iterator,v.end());
0 e8 Y" H* {: x% L7 L2 s        }
- X5 c* }) \6 U5 y        return v;% a- s# H: h9 k  S' d
}
, t: I, }* t# ~' {; _/ g/ f: D
% m0 |) b3 C% Y" Y* k% D' I7 R/ ^//两个vector求交集
: c, @; p4 x1 L# ]- Xvector<int> vectors_intersection(vector<int> v1,vector<int> v2){2 }  ~/ X) b$ b$ H% e3 B
        vector<int> v;/ |/ N& r9 ]) z& P9 K( D' o& f3 Q
        sort(v1.begin(),v1.end());   
+ ^$ u. T5 @. b' J6 a6 E. ~        sort(v2.begin(),v2.end());   
0 \) N4 E, o7 H9 r8 I        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
. G* b9 J2 }3 ~* ]8 }7 \        return v;2 N& @6 A" l$ y% g
}
1 Q) s2 j, d/ B6 M* n
4 u4 G: G* f2 _! C" A, M//两个vector求并集
, V5 U9 h- ~9 I' ?8 ivector<int> vectors_set_union(vector<int> v1,vector<int> v2){) `4 z6 k1 G% Y# J+ i" f
        vector<int> v;" \  p) o& Z6 A0 M0 V
        sort(v1.begin(),v1.end());     _- I/ J8 M2 v2 A$ ]7 }7 B
        sort(v2.begin(),v2.end());   
1 A' b; ]  ~6 v" |        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
% y1 f2 Z. `3 K1 z# R2 r' q+ }5 H        return v;' S4 S( }# [  H) Q$ V. k
}3 G8 f# m0 U$ o/ Q  ~# k1 S

; T6 D) V: r& l& G- \+ h//判断vector的某一元素是否存在/ T1 V2 n/ O; F( y& e2 J  P
bool is_element_in_vector(vector<int> v,int element){
# C) y8 j1 U/ S% i5 P8 v        vector<int>::iterator it;, y; ~: Q* _; S( h
        it=find(v.begin(),v.end(),element);
6 A; P0 d. z+ L; ?9 S# j# h1 K$ l        if (it!=v.end()){7 b' D6 Q1 @9 A- o
                return true;
2 E2 y3 R  n2 v! w9 }2 H2 P        }0 v* F1 x# o+ Q
        else{; x9 K% E+ y* P9 K( m+ k- S
                return false;
' b% ~9 a3 `+ }- _% z. Y7 v        }
: |) h# Y, z+ s0 I+ t; e- Z" i  U}
! I1 \6 p9 R# T! h; S
2 ~, o1 r" B+ x+ Z3 V! ~: iint main(){( Z2 [5 ~) ]0 y4 G
        vector<int> v1,v2,v;
2 @. x9 K2 x& e$ O/ ~5 K        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
" k/ @3 L" C7 U: q* d  R1 r9 B/ ^        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
1 W; U. O4 O/ ]& G- O! L        cout<<"对v1去重:";" T+ k- ?1 v; F0 W
        v1=unique_element_in_vector(v1);7 }+ g' k' L/ J: g5 |8 z- J4 K& k3 A
        print_vector(v1);
+ Y) W. ^3 n) R$ Z, g  h        cout<<endl;
0 E( ?* y8 j( i  C' V  T6 s0 u        cout<<"求v1与v2的交集:";
4 b; ]  u* x$ g0 c8 y+ Y        v=vectors_intersection(v1,v2);1 q2 U1 V; o2 G/ q! z1 j: V0 [
        print_vector(v);3 k, {6 h, `9 c2 A) F2 A
        cout<<endl;
  R! H1 l6 K/ y! Q5 M' f        cout<<"求v1与v2的并集:";0 h( w7 x& T0 q4 ]3 r! z
        v=vectors_set_union(v1,v2);
! j2 t2 \; M9 j7 I        print_vector(v);0 N6 |& h  ~% q$ q
        return 0;) p2 @$ V/ A4 [0 a9 H* q
}[/mw_shl_code]1 C5 W3 S& a* N5 u3 Y* d1 L
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了