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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
6 B" R- \, W4 U! W( q0 ]
0 e; T% C8 @2 n
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
9 I, Z; E$ s$ K6 M- j[mw_shl_code=cpp,true]#include "iostream", W5 S* m9 a9 f! a
#include "vector" 9 a  o# k- q. Y/ E
#include "algorithm" //sort函数、交并补函数
- h+ l1 c8 u+ a" w1 z% N  |" E#include "iterator" //求交并补使用到的迭代器2 q2 K1 }! P, b* P0 Y
using namespace std;8 \0 i1 i( ^5 L3 z; j
2 g" |& M: d! W8 v* a# @, K
//打印容器vector
) Q$ X- t# b  n) i+ Jvoid print_vector(vector<int> v){
* \6 X/ m' F. T/ C7 c/ a5 K/ Y        if(v.size()>0){
5 q6 g8 A4 ~, O! J                cout<<"{";  
- n% |% B5 X2 F8 L6 C& f8 I6 J( s2 D                for(int i=0;i<int(v.size());i++){  
6 `7 s" Q) W) h* Z: q; V                        cout<<v<<",";  
9 [! Q$ T9 _( c                }  9 u3 \2 ?8 M! Z5 L7 O. C& c9 M2 V$ Q
                cout<<"\b}";  
* a% T2 t" ^, `$ E        }* u! @  k5 M/ y3 w
        else{2 M3 m5 \: T1 H+ ^& \- ^1 j
                cout<<"{}";
4 C6 F/ l  u  j( v        }& n$ J& B6 z, c6 N& N" p$ M
}- E/ p( v7 r8 b2 k9 q

' P9 a6 K% M( v8 V//容器vector中元素的去重
( h' n" j# A% ?' I% G) |vector<int> unique_element_in_vector(vector<int> v){. o7 e: y5 W% f# F7 x8 J7 Z0 d# ]
        vector<int>::iterator vector_iterator;& R- ]  }% Q& R1 ?  t0 c* p' u
        sort(v.begin(),v.end());! P9 I3 U. E6 q$ L+ H) G
        vector_iterator = unique(v.begin(),v.end());3 _( W: R+ v' c2 e, ?5 j& D- L
        if(vector_iterator != v.end()){  i" `& [: G. Q6 b7 O1 j
                v.erase(vector_iterator,v.end());
! h# y2 R! c9 I+ o        }
( |5 T, D: `* E) b! p) Q$ N) s0 ?        return v;
) s4 M1 T( C" e* U. d* ?}- I2 U1 u. V7 v# p+ @
" m7 T- u0 F/ K
//两个vector求交集: c$ d8 I% q, f0 ], Z3 A5 S$ E8 C
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){: c0 x& n% ?0 r9 X
        vector<int> v;
- P  f: t/ [' P$ }' H- Y        sort(v1.begin(),v1.end());   " Q. F1 e8 u( p6 Y  l
        sort(v2.begin(),v2.end());   ' U8 G) i; w2 x# b
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 ?, {$ V) P" ?+ h# c
        return v;
7 [$ v& X- e  b1 u/ X5 y}8 w/ t# G" _* N

1 a( m) t* C3 m$ w0 ]//两个vector求并集( J( E* A2 `, J6 i! g; _9 L
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){7 r8 b$ `+ C% N+ w4 |
        vector<int> v;) w5 S* l2 j# h6 u) u
        sort(v1.begin(),v1.end());   ' B, [8 C0 S) R9 }. e+ W
        sort(v2.begin(),v2.end());   ! f' d# _6 {% W" h! ?
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 % d- t$ U* Y0 L7 N  y* u
        return v;" k4 T0 w, R$ h1 p
}
$ d2 {. I' _: ^& I1 b/ o
" p, c' n. J4 Z4 C3 `5 S" h" I//判断vector的某一元素是否存在, k# H: Z. C2 m4 _7 v  s: Y. Z
bool is_element_in_vector(vector<int> v,int element){1 n: W6 ~; v3 s  X  q( T
        vector<int>::iterator it;) S* O1 t0 |9 l
        it=find(v.begin(),v.end(),element);- d1 u0 o) e3 z$ J8 q
        if (it!=v.end()){
. w% q, g% j7 D9 x, n! p                return true;
& w: M8 `0 ^  W- s/ m        }# r6 _/ n7 \$ L3 K
        else{
; J; f/ ?9 k: P/ e                return false;$ g+ v4 Q1 j  U0 p& }  L
        }+ S  s* W! o# Q8 ~- r6 d
}1 u( y- ]( w, A/ S; N. A
1 V1 a* r2 j. x0 O# {
int main(){
. p5 |! ]: b* {' G3 ]        vector<int> v1,v2,v;! h8 `- g! X  ?
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
+ k9 z* m3 P5 e' W: n        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;5 f1 L3 I5 S+ p: w
        cout<<"对v1去重:";
, e# }% d' H8 J3 x        v1=unique_element_in_vector(v1);
/ `# m3 L( j4 u; B        print_vector(v1);; d  n, ^5 b" M8 I1 T
        cout<<endl;
2 ~# i/ c+ R+ e$ R        cout<<"求v1与v2的交集:";
5 A" }$ x1 r4 C8 [& p0 ?        v=vectors_intersection(v1,v2);
( v# w. i! z, V& }  T        print_vector(v);
+ r# ]3 N" c* a) c/ d' u. X) t        cout<<endl;: ~& t/ f/ T3 s+ U: R! m
        cout<<"求v1与v2的并集:";
8 d% }# u8 s, S' z+ V' ^        v=vectors_set_union(v1,v2);
1 e2 X, C$ C( n% e& D        print_vector(v);0 [' o1 N3 x4 L" l
        return 0;0 D- z, `4 y: k$ U( J8 a4 W
}[/mw_shl_code]
5 J2 K# v% `! A; d% f
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了