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 2196 0

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

admin 楼主

2018-7-2 19:41:23

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

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

x
# ~' K0 F/ I; I8 J  S

+ o( H6 @) ?3 k( F/ ~7 A0 C$ oC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:* i9 o9 a$ L2 b3 C4 y& ]( j% N
[mw_shl_code=cpp,true]#include "iostream"9 N5 t; a9 D) y, D+ m# f
#include "vector" " c: h4 ^3 p" K) Y# N
#include "algorithm" //sort函数、交并补函数
: ~) t" o# _% t4 c% Y#include "iterator" //求交并补使用到的迭代器
- A4 y6 c3 b- Q! s  L+ p  w5 f6 |using namespace std;
5 C- U9 I, k. i. T, u   V/ a8 w5 n  l. N
//打印容器vector9 G( F! I9 ]+ l9 ~' ?2 X4 F3 D0 G
void print_vector(vector<int> v){5 f' r) K$ e5 |$ Z5 K
        if(v.size()>0){
. B, N1 X: o2 |3 Z2 ?, ~                cout<<"{";  
, y$ u' {& t6 Y/ x: `7 |( [/ b                for(int i=0;i<int(v.size());i++){  6 D  H2 v( J: E7 m1 O! ]" q+ I. F& M
                        cout<<v<<",";  / L. ^8 g2 O& E; M4 P
                }  8 z, ~  u* B0 j: }' X
                cout<<"\b}";  ! R( ?7 i" S/ n  u' K* T& [
        }
  R! j. ]2 ~' d7 \        else{2 l! H+ B1 T2 I( x
                cout<<"{}";
! u7 }4 W/ f! Z4 ?8 I3 l) Z        }: e: d  [8 t# z4 `' [
}
% F6 C) s" B7 Z1 q; @ " ]+ J, m' J0 J
//容器vector中元素的去重
  f  c0 n% _2 s6 r) m, S9 jvector<int> unique_element_in_vector(vector<int> v){- x: E, W( z/ q0 v! J2 R2 ]
        vector<int>::iterator vector_iterator;, s% L+ z" i, \( G! y- [. A* {
        sort(v.begin(),v.end());
7 N. g* ]: S5 k) H, N        vector_iterator = unique(v.begin(),v.end());) H, T' z* k, S7 M8 o* b
        if(vector_iterator != v.end()){& O: Z6 t! o' x  q; f# e
                v.erase(vector_iterator,v.end());
: Q/ ~4 s2 E, n; _3 g        }
. w/ b1 u$ \2 ~- [/ i' R        return v;
' R, f- B! x1 \: m, E1 f, H$ V}3 {6 T; T+ t4 R

$ z9 }( v/ S: W, x; D# K( R//两个vector求交集" I5 @, J% [1 ]7 s% B: b
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){) l9 {% J9 R4 c' q' O
        vector<int> v;
5 z$ j0 [% @; t6 @0 I3 u        sort(v1.begin(),v1.end());   ( o* W; b& Y8 a( L$ h" n9 }
        sort(v2.begin(),v2.end());   9 T% w0 [2 e7 \* I0 o( Z8 w$ D* j
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 p4 l% U# m$ |- T% w2 s' H        return v;
* V& I3 m' Q- I$ a; f# x}
. r2 @/ F. T# Y% s+ {' V
, w5 Y  o! j2 G- F+ [//两个vector求并集
2 ~" C0 o: Y0 K# b( x0 w7 ]6 svector<int> vectors_set_union(vector<int> v1,vector<int> v2){
& G6 R) z4 u! N        vector<int> v;
1 C/ g$ s: `. D6 ^% W        sort(v1.begin(),v1.end());   
2 G0 A2 h) l) O1 e' F        sort(v2.begin(),v2.end());   - R- \  [2 _3 W2 ~7 G" Z
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
% H/ a+ d! a7 I8 ]7 B( z8 V/ K        return v;7 h" K; H$ L& W3 S( C' \  q
}+ [: x0 g! f. w+ M) i: M

+ ^6 i+ x7 P5 r( c# t! z//判断vector的某一元素是否存在
+ J6 Z; y' \1 i! ]8 bbool is_element_in_vector(vector<int> v,int element){
' U1 Q9 h- u9 v. K2 y+ b1 {2 e. R        vector<int>::iterator it;
4 `/ r6 m  K, }; n7 X        it=find(v.begin(),v.end(),element);1 F. d2 u. L5 ^* x3 @9 e1 B/ @
        if (it!=v.end()){
5 b5 z7 l' n2 a9 t3 u/ q                return true;
  e# U& i& H- C2 N9 L, F        }
2 T7 Y& [2 S; g. ?9 }        else{6 F* M( b! W2 c2 [# C" {$ c7 D
                return false;  e9 k$ V) K6 J0 X, A
        }* \4 C0 i# C# T1 j
}
1 K1 D4 J! B6 w+ r1 r- x4 v
" R9 g  R5 S, Yint main(){/ _& i6 ~% I$ Y4 w$ V
        vector<int> v1,v2,v;
6 [0 ]( g, G3 q        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);# q. D" L& i# T/ I2 D
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;4 N* T; ~  z) V; T
        cout<<"对v1去重:";
( \/ J+ H% m4 r+ _8 E0 s" E, j% f        v1=unique_element_in_vector(v1);
0 K8 O+ |* ^9 q, n- k8 B9 o, s; B        print_vector(v1);9 |' v/ q; F' u
        cout<<endl;) R5 d0 L0 h) s# G3 L0 B
        cout<<"求v1与v2的交集:";
4 m1 {" o4 ~/ y' i, j        v=vectors_intersection(v1,v2);, `! I0 E! Y+ P  i, e/ M. F5 [- B3 e
        print_vector(v);7 D  o1 n* r! Y
        cout<<endl;
9 m. D* E* u7 ?0 T        cout<<"求v1与v2的并集:";  ?- v8 ]3 R/ l( G
        v=vectors_set_union(v1,v2);
) f& b2 R6 b0 E6 Y8 O" x        print_vector(v);
5 B) H8 y' @0 E8 W; d3 K        return 0;7 g! p; u! u4 O0 m- V! F
}[/mw_shl_code]5 x5 F% K' d+ p  U
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了