PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
% D6 y! I( X7 @) c
! \0 q/ C9 j( e7 o- _
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:# Y2 Q$ t" v6 T
[mw_shl_code=cpp,true]#include "iostream"
$ n. p0 L) _( ^#include "vector" / l) ]+ S1 C" ?9 b5 `/ \" ~# g3 I0 `  |
#include "algorithm" //sort函数、交并补函数
, B9 T* q0 x& L- W, v& [#include "iterator" //求交并补使用到的迭代器
; K% O- i! _( a+ ^4 Cusing namespace std;
  n% R  k  U* z( [+ V% O8 Q# F+ L9 N! z . z9 i: K8 }0 p3 C5 O- W( H
//打印容器vector
2 C6 r! q3 ~6 w/ m* i) k( Jvoid print_vector(vector<int> v){
, u$ M1 u/ _6 M        if(v.size()>0){
3 Y5 l- n, u0 A                cout<<"{";  , u$ c2 _9 k* G
                for(int i=0;i<int(v.size());i++){  . g, i1 Y& M2 ?
                        cout<<v<<",";  
4 w/ G( [2 x2 u9 K* T                }  
: H; ~5 a, e' @' q* H                cout<<"\b}";  / T9 }$ }6 E" U. E  n
        }
4 x. e) Q: L  O        else{! I! O/ F* e5 g0 {5 `3 }
                cout<<"{}";
: O" ?- O/ L' K/ H        }6 o- K6 F) b3 l6 _/ G# Q  F
}1 D0 P8 S. z& C1 @5 f( g
! x3 N) M2 W3 E; t
//容器vector中元素的去重. |9 A! S1 E- N3 i0 B6 s+ F
vector<int> unique_element_in_vector(vector<int> v){( d; `; `& _) J" w; D* D4 o
        vector<int>::iterator vector_iterator;( X( p8 X5 s' b0 `! e3 t7 c% w
        sort(v.begin(),v.end());) u( D5 S+ E5 t6 }3 J
        vector_iterator = unique(v.begin(),v.end());6 x: \; |) s8 B! ~+ ^1 ~2 r
        if(vector_iterator != v.end()){7 f1 t; s( r1 p! |' q+ i% }0 T
                v.erase(vector_iterator,v.end());% C2 n# G3 e& h) H6 g
        }) {  X$ i' i0 o3 r
        return v;$ N1 v' i$ @1 v8 Q* C  O8 I
}
# ~  n% C  }) s0 _" y" T
  ^* D# M4 S- K' Z% l//两个vector求交集7 K& n9 [) s) o' o+ A
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
/ c  S( }! L2 C' x! o6 p; `9 L  M        vector<int> v;, }$ @) A6 Z& }; \* t& `
        sort(v1.begin(),v1.end());   
2 T: r; {1 p0 Z$ {3 h2 Q) s) t% i        sort(v2.begin(),v2.end());   
1 i7 a6 @2 U8 K& G  v6 m3 N, R9 n/ D        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
& w" f$ i' q' J$ _: ~        return v;
$ v3 r8 [& K' ^; c}. d3 r% z' p- i, o4 @3 V

4 u2 N( x1 F  {1 O6 S# f6 F//两个vector求并集
: {0 _: w% N& V9 ivector<int> vectors_set_union(vector<int> v1,vector<int> v2){% S- g1 D; q' R' z4 }. P7 f
        vector<int> v;
, O0 D6 ?3 E0 X        sort(v1.begin(),v1.end());   0 a& z2 t6 {  j& |
        sort(v2.begin(),v2.end());   * K- T7 t* D- B- n
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 " F3 }. L; e( x% i
        return v;
9 h1 r# _( T) e5 \# V* W: A' D}& w# D3 ^" Z9 _+ |6 t7 H
0 m- J# |( v, G: ?9 O5 R
//判断vector的某一元素是否存在6 Q& m  k  |: a, r$ j# s& u
bool is_element_in_vector(vector<int> v,int element){# w0 i3 w; a  z5 r7 K/ o
        vector<int>::iterator it;' _* @) V8 d" V0 i
        it=find(v.begin(),v.end(),element);
: B6 }( y& n3 g9 b$ c/ J        if (it!=v.end()){
  }  A3 o- A8 t$ F# g  k                return true;  x/ D; t8 P; i" a. i6 `
        }% y* a+ U& z$ c& k
        else{" U+ k7 B+ _) B8 c8 S' c
                return false;
2 e) V2 j/ ~3 ]0 d        }* v  F% {  e, w4 i1 V2 p- P
}
+ d( I. U# K- V# S7 T) W
# |( o7 |6 R! U' m) qint main(){
4 c% H* ^$ B! ?6 z        vector<int> v1,v2,v;
" l( M3 m* |9 g% P, u' D% s/ [        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
4 x$ q( n' a9 {' S        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
. J( ?0 D+ L4 z7 W        cout<<"对v1去重:";
" B( n) x! ?9 U: z! W: M8 G        v1=unique_element_in_vector(v1);% d: s6 f2 t; @- M6 J/ P
        print_vector(v1);
$ a/ {& w/ u8 r1 \( k        cout<<endl;& Q& m1 e- z1 i6 v8 H  H% L0 o; v
        cout<<"求v1与v2的交集:";; K" ~/ K' D4 m  I9 Q" a. P
        v=vectors_intersection(v1,v2);! L+ p- C) o2 g2 l. H+ n
        print_vector(v);! |2 D' v7 q! m4 Q% ]
        cout<<endl;7 q! z) H0 c4 y; A9 ?
        cout<<"求v1与v2的并集:";9 g6 P( X& A" B" v
        v=vectors_set_union(v1,v2);
: c- J5 A4 M6 E. I2 h, T        print_vector(v);& [& F8 e% A% N8 R2 o. o' X: p6 o8 ~( z
        return 0;
* ~. a( A- Y) _9 d2 M; U}[/mw_shl_code]# p& S0 \$ W9 ?9 f- _) l: s* l( F
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了