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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
9 v4 o+ i5 w- B% C! k
/ |5 i' }' o. c! c
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
) f1 e) ~) _1 I" T[mw_shl_code=cpp,true]#include "iostream", ~6 G$ ]2 f: m: X$ p8 T- ^' C: ~
#include "vector" 1 q8 [  D. n2 \4 V, G9 k4 J
#include "algorithm" //sort函数、交并补函数
2 v2 {$ c$ G* @3 ?) f/ j#include "iterator" //求交并补使用到的迭代器4 u0 H" n# y. P+ z6 Q& Z' ]
using namespace std;, A5 _) N) _0 }; B

: V1 R% q. ~& D/ F2 I5 J( ?: H$ o//打印容器vector& s2 T7 V4 c/ u% I6 O
void print_vector(vector<int> v){4 M3 K% m- T% I( ?, p" @( ?: Z
        if(v.size()>0){
$ L& Y, D  o% F& j                cout<<"{";  
' u3 Z! S: o: b1 a" d; [                for(int i=0;i<int(v.size());i++){  & N) J$ H; H0 P- \5 B$ S! g2 Z
                        cout<<v<<",";  
2 L5 ~% X8 b( p- Z                }  ( T. |# t( S6 Y4 ^" D1 h. R/ r
                cout<<"\b}";  
2 N4 Q' m" p8 X5 k        }
2 C# g  S: \) C7 Y& d        else{
. ?# W* [: Q# A! U                cout<<"{}";) b( V, O# C( [- z
        }+ \6 f' j  \) N- o! ^0 V( ~
}
" E1 m7 r: Y. i& l, f( X - y4 T: {7 G; U: ^
//容器vector中元素的去重! m' T  e, U+ m) t& X. T, d3 w
vector<int> unique_element_in_vector(vector<int> v){  ~" r* L, V1 W- _9 B. Y7 D
        vector<int>::iterator vector_iterator;
/ N8 l; ^9 |& U3 t* g        sort(v.begin(),v.end());8 e+ @$ \( s& \4 C
        vector_iterator = unique(v.begin(),v.end());
! R- C" A8 U' G) }( F1 e/ U) Y        if(vector_iterator != v.end()){
/ N9 S0 v1 Z5 x                v.erase(vector_iterator,v.end());3 t, O/ h/ r6 P
        }5 p5 s& C) b1 {4 ~- N
        return v;
- b$ _7 S' K1 {- T+ S}6 F1 Z; s2 _( w4 m. f2 X
" e8 h' {% K7 n$ }7 F) L
//两个vector求交集( \/ W4 V: }) c1 B, c$ F; n7 w
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
9 f" ^& K8 T7 p2 U        vector<int> v;6 g2 N0 \' H1 T' L- [
        sort(v1.begin(),v1.end());   
5 \1 A; E% m; @* ^5 x( Z1 ^5 ?* c8 z        sort(v2.begin(),v2.end());   $ C& n* W( r6 `- I* s+ q
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- c. ~0 y( M; D2 x# w        return v;
! [4 t% e5 R) d- ?/ u2 w}
; v& I2 e* ^, J2 }  @9 ~* u. i% j( o
: o. d9 Y3 p% U0 W, X% I//两个vector求并集
1 g( x  ^# M3 D% jvector<int> vectors_set_union(vector<int> v1,vector<int> v2){8 ^$ J( c, c6 A2 I; i4 v" X
        vector<int> v;
, y4 T6 o; U- u. h; Z! I6 h        sort(v1.begin(),v1.end());   * U( I. B9 }4 U! M% [
        sort(v2.begin(),v2.end());   
7 D  \2 u! O7 l- R1 J1 p        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
/ e- ?/ l3 s; _8 o/ n8 n        return v;- ]. }1 s4 s# W/ b. P  N) Y
}: R- ]3 |, M! \8 d! i

) z$ n. G+ M6 m//判断vector的某一元素是否存在
& r; n! D0 }  o. o$ Q' z: Rbool is_element_in_vector(vector<int> v,int element){
" B+ \/ |4 h9 D5 W: W9 C# H- k- O- y        vector<int>::iterator it;
4 F) c9 o. o- L, U# }4 P1 i        it=find(v.begin(),v.end(),element);3 z) p+ S3 W; h# l2 ^, D
        if (it!=v.end()){* z& A- d1 d# K: a4 q7 i! M% L/ X
                return true;
; G: P, D* M) P5 c  b- f        }" y& A2 @: _6 j8 K& c+ R
        else{
/ B/ D' s( Y" b, v                return false;
; M4 Y. t% x' K  j! W        }
% D  h  f5 s$ E' {3 D' V& |}- y6 |+ Z" {' H7 N! L

+ l4 x! d/ ?; S0 y9 _- T0 oint main(){$ D, k3 v5 F" P8 i% C; T9 \1 |
        vector<int> v1,v2,v;) v1 j! V; @& d2 ?' O) C( F
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
: H7 H8 P! w9 M" t        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- g; v# i1 l! i
        cout<<"对v1去重:";
/ I: ]( x1 r" r) t        v1=unique_element_in_vector(v1);
* d* Z% l7 n4 |# |/ S8 u. m        print_vector(v1);5 \% T% B. Z5 E7 B
        cout<<endl;
4 @! d$ D# w7 g2 ?& _! r        cout<<"求v1与v2的交集:";
  e" f3 H* l) {        v=vectors_intersection(v1,v2);1 \7 i9 c4 W. m( ^  J( y
        print_vector(v);5 K' E# K& }0 `
        cout<<endl;+ K! _" n1 c/ v' v3 k3 I2 l/ g( |
        cout<<"求v1与v2的并集:";0 I4 X+ x5 U. N0 p' p# a
        v=vectors_set_union(v1,v2);
; F% u$ \! W. q/ Y        print_vector(v);% X% ]5 H0 ~9 z. H# H- o: Z/ k
        return 0;
4 C1 ~2 ]! C( ^4 v4 A1 @}[/mw_shl_code]
' A) m% p* y1 o. F7 p/ }$ L$ ]
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了