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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
, h) ^/ \) ^4 g4 A7 Z! w

+ ^* K# V1 y+ u+ Z3 ~1 @6 p1 cC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:/ w* \+ Z$ m0 A% c* g
[mw_shl_code=cpp,true]#include "iostream"8 T2 ?" C2 G( {" M8 V( L
#include "vector"
" ^: [7 `, z7 t/ O4 d* G: w#include "algorithm" //sort函数、交并补函数# H0 _' q1 `3 ]' E$ r, b
#include "iterator" //求交并补使用到的迭代器
# j4 b  J& q4 e3 @. S1 Pusing namespace std;
/ t$ n  d! B8 _  R
. [" z* |7 g5 T1 y' h& ~//打印容器vector3 T5 g- T3 b; ^) W) o4 B: w- r
void print_vector(vector<int> v){
" Q2 {3 L8 i4 y4 J% k9 b, w  t8 f        if(v.size()>0){
& Y6 R1 `% z: \% @  w, c9 \- i                cout<<"{";  
: B2 `0 _% j, N3 Q7 ?                for(int i=0;i<int(v.size());i++){  3 d  u  X5 R8 N0 k* ]" P/ o! e9 K
                        cout<<v<<",";  
9 [* j" p$ ^5 k                }  , S) `2 R0 G2 j7 I
                cout<<"\b}";  ' |3 s, S+ ?7 O. L# K* o
        }
) `8 E) x3 v( T* `& [& D5 {4 j/ u        else{
3 i% b& P! }/ J0 I, E                cout<<"{}";
2 `' ~& d. @# q        }
; L% x$ ^4 B0 `: W4 j$ u}
6 z) j- B: L& n% z 3 r" l) l3 s* I$ n
//容器vector中元素的去重
9 n1 t! r; [- Hvector<int> unique_element_in_vector(vector<int> v){* M$ K. s/ O8 D: w$ G) J
        vector<int>::iterator vector_iterator;; }8 N6 B+ [" q
        sort(v.begin(),v.end());% L+ X/ ]/ @" u0 }5 k0 n
        vector_iterator = unique(v.begin(),v.end());
  S) S6 g8 ]# j3 X/ m        if(vector_iterator != v.end()){
3 Y. s# u) p) x. W) F* c                v.erase(vector_iterator,v.end());
0 B. d, J" O' h+ W0 j        }" N8 n3 s* W& I2 _7 j
        return v;% v* Y# ?5 @7 N3 t4 Y
}- R4 {; K$ X$ n) a

) u! O4 d. F1 a: g5 K3 \6 q' A* ^//两个vector求交集
' N" t7 l* p  Z: t: [; Xvector<int> vectors_intersection(vector<int> v1,vector<int> v2){" q; X0 a, c0 c  I; ]- N
        vector<int> v;3 N; f& h  O& {; g! V7 O+ k# M
        sort(v1.begin(),v1.end());   * K5 I1 I) A( d5 o! I& A  X# F
        sort(v2.begin(),v2.end());   : M6 C" m8 T, e
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
; S* N* }; A" m        return v;+ S6 a/ w  U3 z
}8 Z0 H, s* ?6 v: ~
/ G& _& j& r' [, ^" b  D6 ^
//两个vector求并集# L% |. o6 Q5 ~
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){* ^5 ^' U; W8 m" l" L* ^& r
        vector<int> v;
: v0 _2 w1 Z5 Z* g7 f/ @0 H0 U        sort(v1.begin(),v1.end());   
$ i# v; Q2 |  Z4 X$ b! N/ x( k- P, M        sort(v2.begin(),v2.end());   
2 \$ l) x/ b+ ~7 K0 f3 E        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
' b; w" O  B: F- n+ Z. R5 m        return v;8 d2 z# U9 |0 l2 F5 k& I; R: O, H
}
; {: E) R* z$ v# m) m, G " d4 X. }5 Y7 t  }4 m6 w2 p
//判断vector的某一元素是否存在
- o% o2 h3 K7 n. |0 ~2 Ybool is_element_in_vector(vector<int> v,int element){0 d! ]) p8 F' N: |# n9 o
        vector<int>::iterator it;
8 W2 h  o' ^) K        it=find(v.begin(),v.end(),element);
% S% L3 i" o6 p        if (it!=v.end()){* M3 Y: `" K: [3 \3 q
                return true;
2 e5 Z$ w+ K( p1 T& c        }
1 T, ?+ k; L4 [        else{3 B( h1 m( L0 E  t7 j, M5 }
                return false;
! q" H8 h# r* b7 Z        }
2 L0 g# R& n+ k2 W}8 B; }7 l: G8 G! {% W. n

& W) Q! N+ L$ C: l1 mint main(){$ H" d; f0 x+ b: D+ G; C, I
        vector<int> v1,v2,v;6 A7 P2 q/ P5 e4 D
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);$ l" v& x: G+ s- y# j8 m: W) W
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- \0 n' u' K* z, B# h
        cout<<"对v1去重:";
- l' T2 D! `% d        v1=unique_element_in_vector(v1);5 ?- D/ m' `3 }# Y( @- p  Z- S) I
        print_vector(v1);
$ |5 y+ M6 ]( u% l        cout<<endl;
  J5 c: J0 J( G        cout<<"求v1与v2的交集:";8 _$ v, ^9 o1 y& G3 Y$ E& g
        v=vectors_intersection(v1,v2);
( |4 f4 L7 d) l+ R" c        print_vector(v);% R/ J) z8 t, O
        cout<<endl;
& m7 A6 \7 w5 E        cout<<"求v1与v2的并集:";
: {, C( p/ b; x  `# B        v=vectors_set_union(v1,v2);
5 B+ r. a  m) C, Q* d/ j1 |8 L+ q! W        print_vector(v);4 M2 m0 t0 `5 L# \+ E2 x) O& x
        return 0;/ g  o: Y, d- E) B- i+ l
}[/mw_shl_code]/ ?7 B# M$ d! r1 r
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了