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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
7 Q, W5 S8 N/ \) z. Y- N
& D6 c" X- A( {2 j2 J
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
- Y: a1 h. A+ O' Q5 l[mw_shl_code=cpp,true]#include "iostream"9 ~* W( R: f4 R( R# }
#include "vector"
7 Y0 m$ Q% `- M4 Y#include "algorithm" //sort函数、交并补函数/ P: T4 B; h# Y  M! v9 ?2 \
#include "iterator" //求交并补使用到的迭代器6 g  s& h* y6 x* o6 A! U% d6 K
using namespace std;7 g8 F* w& O: a/ V# N+ r2 k
! U8 ?5 r. w% C3 q. o
//打印容器vector3 G. t* S! ^: X% }5 ?$ G0 H
void print_vector(vector<int> v){
8 Y0 {2 B7 P3 n' ], S" d0 `9 N        if(v.size()>0){
4 |/ G( ?4 z5 w: H1 S# ]                cout<<"{";  . ^, T3 P& H, ?: x$ S+ E% Z& R* D! O
                for(int i=0;i<int(v.size());i++){  
: ~# Z& e2 `. f3 M/ m3 L% m                        cout<<v<<",";  ) \& Z6 d, t" ?% I- d
                }  
7 k, c. s8 h" j                cout<<"\b}";  " x$ b: f: m  D; o6 _
        }" K0 u* |8 o. j9 l
        else{, c9 Y# u! d! x" s( k1 i
                cout<<"{}";
/ m1 I! |0 X8 V- z8 \2 c/ x* M        }
  U. ]" x2 z0 g3 H& \}
$ i! `; b9 ~6 c: l& s$ r
( {4 d. w4 [9 V$ t  I* I//容器vector中元素的去重
, N( C( z/ L1 b/ H3 nvector<int> unique_element_in_vector(vector<int> v){5 B9 b) {- N, f+ ^
        vector<int>::iterator vector_iterator;, Q/ E+ |" C6 z$ A# y3 I+ N
        sort(v.begin(),v.end());2 t$ K1 l7 {8 O; s
        vector_iterator = unique(v.begin(),v.end());8 B6 [. P" W& H" I* t( r" d
        if(vector_iterator != v.end()){
1 I9 a; r' v* S: x8 |2 G4 K/ e9 q                v.erase(vector_iterator,v.end());
& d: C2 n$ F1 Z& S  }* ?( c        }" @- J, J: J5 z. l. ]
        return v;
1 g# h& q" v3 f. ]7 s$ j+ p& u}& ^- ?4 k) g" }- H- ]6 d) d# r% a

; L/ F* Y) [" f* `//两个vector求交集
' K7 L' v6 b8 _8 {+ R/ |vector<int> vectors_intersection(vector<int> v1,vector<int> v2){+ ^' o  A+ {6 L5 H4 B
        vector<int> v;
5 q/ k$ l, e3 ^        sort(v1.begin(),v1.end());   
0 c/ a( f6 |1 j. c7 s- x6 N        sort(v2.begin(),v2.end());   
( }6 f5 I4 ^3 x: b        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 }8 l8 \- x; }# ?2 m  H
        return v;5 f1 H, H" v. |6 Q
}+ I7 `! h. e6 l5 c$ ?9 O( }( ?
0 ^% N. X' w4 S: }# X
//两个vector求并集  @2 B, w" Y+ C$ R9 R+ g* S. A
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){% T4 g6 @& W) u( @( w7 M
        vector<int> v;
6 j" W  j- t7 W3 X        sort(v1.begin(),v1.end());   $ O; V* @% A( |6 B
        sort(v2.begin(),v2.end());   
: I& v4 P& w$ r' w        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
! Z6 b3 N7 `) \, {( h/ |        return v;2 K0 V) V4 m; f+ S. ]
}
8 D: P+ f% V7 C, J" t ' X1 w7 V2 K% y  h) c
//判断vector的某一元素是否存在
9 M! F7 j- [$ J- N6 n6 D; c( Vbool is_element_in_vector(vector<int> v,int element){
1 i; J4 |6 l6 E) \' Z1 M        vector<int>::iterator it;
& q: t, D" \+ h: a- a& L9 {        it=find(v.begin(),v.end(),element);
9 [6 e4 H3 w; d" a8 ^2 }4 L        if (it!=v.end()){' `" l4 }2 y  \; L
                return true;
0 z  R6 t  E3 J! X& I+ s8 L. P% |. n        }
# Y3 I1 u/ G- M) B8 x8 m; Z' B; f        else{
' {. B" A, O' \: b                return false;
1 G6 L) P+ [8 R/ \. \; }        }9 C) |7 k3 }& c% s5 c2 E
}
7 d7 V- f% K8 f' H& ~& U/ D. @( _
# A4 T9 L/ x4 w. B$ M+ Q8 aint main(){
# w7 ], g( K+ H* [2 ]% s" [) A: N        vector<int> v1,v2,v;3 X& B( P5 l$ {! [/ {- X1 F
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);' o6 @& K) h8 V. R
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;0 O* R; O) c) N1 A/ V
        cout<<"对v1去重:";
2 b# U- J$ v1 w9 C$ y5 b        v1=unique_element_in_vector(v1);9 L8 `* _8 E4 f6 J# X* t
        print_vector(v1);
: M; \6 N+ o! g# y& \+ U' O        cout<<endl;
1 k/ e' N8 c1 m' Z2 J* \        cout<<"求v1与v2的交集:";
1 K2 [% I0 f9 w% w0 ^" R# `0 {/ }        v=vectors_intersection(v1,v2);
; z8 q6 S: y3 F# T9 J        print_vector(v);
( l* d) r; Q. N( a) t        cout<<endl;
$ `3 o* g6 ], X! t        cout<<"求v1与v2的并集:";
7 r( X, r5 j2 Z5 Z        v=vectors_set_union(v1,v2);
* Z- z% p3 E6 c6 T        print_vector(v);7 _3 Y- Z4 S0 t# \( V
        return 0;! d9 C* m* A2 q" R) z2 E
}[/mw_shl_code]
9 q4 |+ d7 |4 K4 g' k6 |
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了