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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

% k" ~) o& [; T
6 N2 W8 ]& [7 R4 n( N+ vC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:2 V, B/ w( r" G$ ?# @- S
[mw_shl_code=cpp,true]#include "iostream"
* ^7 _, o& q  G6 r3 F5 J" H#include "vector"
4 \/ u* ~1 P3 u#include "algorithm" //sort函数、交并补函数
+ t- I6 W; H+ _+ N7 ~#include "iterator" //求交并补使用到的迭代器
  J( r# r6 o+ I3 F0 xusing namespace std;
) Q" h8 t, W: `4 M; ]& |" K * c% t: K# T1 U- c5 O: r0 P$ o
//打印容器vector) O* O/ g9 Y0 y- Z. b  D
void print_vector(vector<int> v){/ e: U' Z2 O# E+ Y6 t* R
        if(v.size()>0){
' o2 ~3 L2 B: R- u8 S                cout<<"{";  
3 b6 B; G! g4 d: J3 M9 `                for(int i=0;i<int(v.size());i++){  
% i; ~' g! T. k. q. ?* j: \                        cout<<v<<",";  
  B2 S6 p5 \/ r( a- h, w- C                }  
/ Q5 n: [3 i3 P* \                cout<<"\b}";  3 {4 n) P8 t: `! Y
        }2 J+ S6 o, j5 T' v5 i0 P+ H* X
        else{4 Z& [" |8 k* H9 b' F  s% B* z' z
                cout<<"{}";
/ ?+ X" n. Z* a3 m. K        }
& V: @4 Y' L& U/ U  h! x4 W% I+ W( }}7 q1 ?0 q6 k+ K9 ?1 J

% R, E8 q$ D$ {- {* d; T- w6 w" b, |! g//容器vector中元素的去重! R: A: g% {/ |" Y2 _/ C4 s; N
vector<int> unique_element_in_vector(vector<int> v){4 \! [9 e; E% _3 \
        vector<int>::iterator vector_iterator;
5 d2 U( j2 Q/ Z6 z& ]; }. I5 B, ?        sort(v.begin(),v.end());" k/ t1 |8 x0 `6 Q
        vector_iterator = unique(v.begin(),v.end());
$ Z+ _" c, D0 x& r* F  c        if(vector_iterator != v.end()){
7 ]/ B/ P  h/ W. y                v.erase(vector_iterator,v.end());
: E  L) e# l/ t, `1 i        }, D/ q: v  H/ W) Z
        return v;. S7 g" t; D' K+ D
}6 J: V5 z5 g( a. X6 Z
( }4 x: c6 B0 d" m% w
//两个vector求交集
+ E, Z3 ?9 N+ ~0 e1 lvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
- O9 }9 E+ c+ k2 c: Z        vector<int> v;
- n, P. _  f& d+ I& }5 z  }        sort(v1.begin(),v1.end());   * N  A. i2 ]. [' |# q- R. ]
        sort(v2.begin(),v2.end());   9 F7 @2 x6 ]# ~6 w4 C9 w
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ( F1 x1 Z( N/ M1 W- Z& q8 Q) I+ K" d
        return v;: `+ w* }" v+ I! c
}
; c0 @6 p( [' q: ?
1 |1 i: X* O# T) M, h! l7 `5 l//两个vector求并集
9 o0 c# E9 ]- s: B7 P  K5 \& Dvector<int> vectors_set_union(vector<int> v1,vector<int> v2){9 g4 o4 R- t, K( ]6 u+ y# m
        vector<int> v;
4 u4 K$ j) q9 ?        sort(v1.begin(),v1.end());   ! ?* h* z. j! s  T
        sort(v2.begin(),v2.end());   
8 c% C% ?) E+ M+ z+ x% @        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ; x, K! R3 F0 S0 L
        return v;* q$ P; `; T6 e- H. ?3 _8 i
}
  d/ ?' ?/ l  m$ D6 Y& A* ^ 6 c0 Q- m2 W3 Y/ ?
//判断vector的某一元素是否存在
6 {& X5 J' R5 b! Bbool is_element_in_vector(vector<int> v,int element){
) _6 b$ B# t" P, m        vector<int>::iterator it;
2 r6 j  _$ S+ B        it=find(v.begin(),v.end(),element);( C- p7 [* E: J- n- [
        if (it!=v.end()){
' X% C' g4 w& Z" Q+ r                return true;
7 m& ~8 Q) W; R        }* e- Z! r4 {! h& ?  v
        else{
. {, |# D# ]: t) [2 A                return false;
" Y, r4 S. A# a( O( W        }
- f2 X* `, [! A' x* O! Z}
* c6 i% q  C" K3 R" K, D+ T& q
1 g: R- D4 ?6 H! |int main(){( w6 @5 M; F2 l" B4 G; u& Q* s
        vector<int> v1,v2,v;
8 i/ z3 ^% F1 Y" L0 y        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
' I" j. S/ J1 `        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
/ U/ p- D- K6 B2 i! w) n4 A        cout<<"对v1去重:";7 B' x' Q0 g% u7 a5 Z) p& k" t
        v1=unique_element_in_vector(v1);
& P- Y: M4 c+ c        print_vector(v1);. b+ `3 p5 B; b: h& p) a( c
        cout<<endl;9 |: @. Y0 p+ S  K  Q  X
        cout<<"求v1与v2的交集:";
% ^' x, V; Y  a4 D        v=vectors_intersection(v1,v2);4 r5 `  B6 N0 h2 \- X% A6 x- m: |- _
        print_vector(v);
7 P& [5 z% L- n7 d( u5 U        cout<<endl;/ P; f0 x' U3 z7 g$ a
        cout<<"求v1与v2的并集:";
- a8 i  X4 V- d" t+ D9 e        v=vectors_set_union(v1,v2);
2 H6 S' I+ z5 d        print_vector(v);
3 F( A4 ^0 [. S: J, z5 W- q3 r        return 0;
3 p7 }' {* k- j! c2 u' q8 S2 J% q}[/mw_shl_code]
1 X( l/ H) i3 ?3 B, G* B$ u
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了