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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
: }0 R- O1 \0 h. r" [& H" P

& ?6 x* g4 x0 N5 ~C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:4 c& K4 Q& o7 }
[mw_shl_code=cpp,true]#include "iostream"
1 ]% |5 E. g1 P! }5 f4 p4 C4 B#include "vector"
- L- L/ a) k% b4 ?' n- V#include "algorithm" //sort函数、交并补函数  z8 d+ i8 }4 H. E* P
#include "iterator" //求交并补使用到的迭代器
# \3 {* M* \# ausing namespace std;: L3 F, B# b5 e1 y* a+ Y6 ~+ J

7 P2 F  K- e& n+ }' H( t$ u. w( q" c//打印容器vector
; r' v; \* S6 Z2 y' _void print_vector(vector<int> v){; Y+ N$ E, j% Y# l
        if(v.size()>0){6 Q( W& U% n7 s# M% b) H. ^! J
                cout<<"{";  
9 q% y. f. R' U* N$ p; B/ L' R                for(int i=0;i<int(v.size());i++){  3 g& ~6 K9 K6 L$ p6 d
                        cout<<v<<",";  ( i4 O; x% a' j0 _9 I- ]$ e
                }  ! f3 t9 r, c2 Y3 H  w, n
                cout<<"\b}";  
6 V0 z! D0 a( ]8 S        }
* h  }3 c$ |2 Z! J0 }$ ~7 n$ x        else{
, j+ m0 D5 u& N                cout<<"{}";+ M& V# X0 i4 w3 @# r$ I: C
        }
7 U& s# _  P! u1 Z}7 ]4 p* x* l$ j2 Z6 @
8 ?/ X) {" f7 H1 V
//容器vector中元素的去重, K$ V$ C' l' F+ E( }" O
vector<int> unique_element_in_vector(vector<int> v){
! h: Z6 H; p" [+ O7 O' p        vector<int>::iterator vector_iterator;0 L# _' u  k" L8 B4 h
        sort(v.begin(),v.end());# v$ U: d* I! D/ `
        vector_iterator = unique(v.begin(),v.end());6 A6 L; k5 }* Y2 Z( V/ E/ {( K8 ~7 p
        if(vector_iterator != v.end()){
) m* _9 j  V2 `; m. R! s& B                v.erase(vector_iterator,v.end());7 _6 L  z4 Q3 ]& U8 I
        }
7 R( n1 ]/ g4 {' o, P6 t2 @        return v;
0 ^, p  N8 V- e+ \; u8 V; A) g) Z}; K; W9 N4 w3 R0 g

, y/ ^1 t, s5 X8 p//两个vector求交集
( p" |/ c, r/ \* K( F0 lvector<int> vectors_intersection(vector<int> v1,vector<int> v2){; ]: @1 i/ g9 S2 ~. C
        vector<int> v;2 \. W$ O4 h' v/ X
        sort(v1.begin(),v1.end());   
0 P" e' R; l7 Q/ m        sort(v2.begin(),v2.end());   
' p0 m/ x! v! F( X$ y# X        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集   H) n; N$ e% c* j1 [
        return v;
( c( J: m9 }- V, }! H$ H% J}$ k" |7 Z" I' S9 B5 d. p

6 H1 |3 t9 N! \+ s6 F$ U//两个vector求并集+ N& ?2 Z' I+ b" _
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){, c: b! M0 ?6 s1 {
        vector<int> v;
9 D6 I9 U! _9 n$ s# ~$ m$ Q        sort(v1.begin(),v1.end());   
9 l6 M: A* a/ W1 A. i( r' v6 R9 b4 O        sort(v2.begin(),v2.end());   
/ @" H8 S6 Y, {" m$ r        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 % M" K, M& }; f4 U$ t
        return v;
6 {$ s, m" ^. A. G* M1 c) ]}: a% E5 W/ ^' Y3 v, P
7 d' k# w% Z9 m/ T  `! j6 S
//判断vector的某一元素是否存在  l; R+ G  w1 B4 B
bool is_element_in_vector(vector<int> v,int element){
9 `7 k- e; }8 h, i* S  }8 H/ N        vector<int>::iterator it;+ D1 A" \& Q9 b( K& s9 E: |" G$ s
        it=find(v.begin(),v.end(),element);
* O) \2 E( ]6 S, y! R        if (it!=v.end()){) ?/ \, P: V1 m$ I
                return true;# `- M2 S& I: ?- x$ d2 P
        }. a! d# c$ `4 v, H; `' }
        else{/ T; a- C, V2 g. y
                return false;
: }& [+ ~2 i/ Y& v' C  K        }4 |8 s7 t/ q2 A3 v, a
}; Q( B. F: I# o. A% l% ]# b

& H" H1 {4 x% Tint main(){$ b1 {7 R# \% R& @: _
        vector<int> v1,v2,v;* P) l& Z: @# k+ |& A& i/ N
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
& f7 q1 v3 U$ k' y4 h        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;. x* p4 A; i! G
        cout<<"对v1去重:";
! V' t* \; U8 B7 d        v1=unique_element_in_vector(v1);
/ p" a1 G9 k& B) ^% V        print_vector(v1);
8 p. D+ q+ {  t* P        cout<<endl;
+ z3 [' y9 q  v+ L# L( x5 _        cout<<"求v1与v2的交集:";: m! R. C$ l7 l1 m) ~. W2 L
        v=vectors_intersection(v1,v2);
7 {# d  e7 |3 s# x3 j. ]  K        print_vector(v);
3 w, f6 ~; X! U' v        cout<<endl;, H4 U. C# t# K8 E6 a
        cout<<"求v1与v2的并集:";
3 h" T1 v: Z9 q5 e        v=vectors_set_union(v1,v2);
( S5 F7 a3 o5 d3 q        print_vector(v);8 |! i' Q3 e2 Z
        return 0;
( m. `5 H  B* X! ~) d# p+ ^, q: i. ^}[/mw_shl_code]# X. o' C. R6 ~1 ]& k0 \
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了