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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
) N2 R% g# ^7 q' e) U; ]7 D2 e, Q8 W5 ^

3 D& |' m) k& C# T$ FC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
" c3 i7 i% k4 a/ k& M! `[mw_shl_code=cpp,true]#include "iostream"
7 L4 Y" k6 t( u" h% {2 V& O#include "vector" : h+ N6 _& Z( X
#include "algorithm" //sort函数、交并补函数; y# T; [9 _  _3 [! M
#include "iterator" //求交并补使用到的迭代器
6 X# ?- r6 z* c6 H( @using namespace std;; T7 N- j( D# v9 v3 q2 @7 q3 u

' ?& j% N: T9 P- X//打印容器vector
" \; F/ U( `. F. U3 T- e: e2 Wvoid print_vector(vector<int> v){& z: Y, k  i- \/ s( x9 I! f
        if(v.size()>0){+ C: b3 ~/ \" L0 U8 l
                cout<<"{";  
' a( A5 d' w, Q; }2 ^3 |                for(int i=0;i<int(v.size());i++){  5 ]' O8 E$ G, }' {
                        cout<<v<<",";  
8 P5 _8 U' P- b8 ]% V  {% v                }  
( w. m4 V8 y+ e: k+ k. X9 B5 h                cout<<"\b}";  : ?, e, c0 m$ E; p$ Q
        }
& `9 m" r8 t. P' H, s& t        else{
- N2 F, G8 f8 G: T4 x1 c6 @/ E                cout<<"{}";/ ~$ E/ K& R" r/ H
        }
. X5 D2 \' ]7 C7 e: s. o- N}
7 m/ u7 ^+ X2 K4 a2 N9 | - A+ C) n9 R; \% d' ~
//容器vector中元素的去重
$ O9 {* D# n; p+ y# |4 e+ t; hvector<int> unique_element_in_vector(vector<int> v){! e8 M( F& _4 T( D0 l9 M
        vector<int>::iterator vector_iterator;
* T/ l7 r0 K& a0 B) _        sort(v.begin(),v.end());
& b* b( z: E* \( [  g6 f        vector_iterator = unique(v.begin(),v.end());
+ t% E' T- w3 U# I% O% n        if(vector_iterator != v.end()){. r+ H# Z  p- l
                v.erase(vector_iterator,v.end());
$ _0 @! X# {! ?4 n. l3 m/ h3 x        }
2 K6 q4 V) g' f- x        return v;
% a7 l) V( F" S! P5 K, k7 u}
' R4 Y$ Z8 w8 G: \- _. i
  H& q3 l7 I2 Y//两个vector求交集" t" Z8 h' J: @6 _  ]
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
6 Q3 G+ z/ B2 i# {/ t* R) t. r        vector<int> v;
% L* T3 d, k. s8 k        sort(v1.begin(),v1.end());   * L, v) E5 e% f+ s% H1 {8 |6 O0 h
        sort(v2.begin(),v2.end());   ! ~; B- k0 E4 |- W1 q/ c  R
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 7 Y! v2 \* |# e8 `0 R
        return v;
4 U* a- }6 V0 n5 F}
6 r  j; w$ m0 l: e' k! j9 Z! h5 V 5 M5 v# y# U- L1 b; d/ y
//两个vector求并集
3 F) [% P' @. B6 O, H! B( l+ K" _vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
& f3 A* m0 v  j- \. `# Y% m        vector<int> v;
. ?) `/ ?2 ?- t# F# J; `        sort(v1.begin(),v1.end());   
6 O7 ^& H  }. @8 R        sort(v2.begin(),v2.end());   
2 y& s4 X. {9 {! W% k        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 7 A+ M* E5 |; _0 j
        return v;
* R; H1 q* ^! q6 A3 j- t}
! E/ B* a5 P& u. P' O+ a8 r $ S6 i3 b/ f/ s3 L7 N
//判断vector的某一元素是否存在
; p  B+ |' I% y7 l6 B' W. gbool is_element_in_vector(vector<int> v,int element){- n) Z3 s6 Z5 t* e% F
        vector<int>::iterator it;
+ C7 f, O6 o- F# y, q+ _        it=find(v.begin(),v.end(),element);
+ Z5 W; v) Z3 A" j" [        if (it!=v.end()){. }, t. K- w  Q" e( z
                return true;! U* P2 `3 R. Z  }% g0 k+ B
        }
: {: I8 t+ R2 j# f* H' m' J        else{( o: }2 T0 B5 \* J0 z9 m+ X5 p
                return false;
/ Z/ U) a! c. C; z& J5 K, ]        }
' V6 F* Q4 W* q}
  I5 ^8 J) F( ^4 L! p2 n 7 l, L& ?% ?# H# N% {) S) t
int main(){" _( t# K5 L" G$ b- y. M  k2 ^# m
        vector<int> v1,v2,v;' m+ y1 D' V+ I0 q+ E* ^' J; g
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);# w; H  T/ Y, ]5 ^8 \2 ?
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
3 w, _& ?3 S- w5 P        cout<<"对v1去重:";/ \4 z; t; h, I3 d+ ~- b
        v1=unique_element_in_vector(v1);: Z5 N. ^  u  ]7 o' E
        print_vector(v1);
) F6 @# y3 Y+ g/ M        cout<<endl;, C/ o+ ~) ^; ]+ Z
        cout<<"求v1与v2的交集:";- J7 ]' {# x4 t, s
        v=vectors_intersection(v1,v2);# t. z; l/ C! _  h7 h- z* S) }
        print_vector(v);
2 W$ x. d/ t) z% e# L4 q        cout<<endl;
1 x0 r) a5 n, i9 T/ C( m5 M        cout<<"求v1与v2的并集:";( p. O2 x. _1 a9 m" `, [
        v=vectors_set_union(v1,v2);
; T/ V' b3 H2 E) \! l6 d1 c  |3 S        print_vector(v);0 g/ K1 s6 B& P9 z5 f
        return 0;
; o0 p; Z- [9 u0 S}[/mw_shl_code]' @$ b4 j. [) v
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了