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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

/ @# H$ ^# `; d) @+ _
/ O- n: x) ?2 J# Y% g# \# k1 |C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:2 r" R# ]' v" U
[mw_shl_code=cpp,true]#include "iostream"
: ~2 C& q$ |9 A; e#include "vector" ) Y% N. O1 l+ a/ p% P
#include "algorithm" //sort函数、交并补函数
. x8 z/ g* a" b: Y  ]#include "iterator" //求交并补使用到的迭代器
9 r  k( w! E) eusing namespace std;
9 H1 J# P5 a% j/ U. T& o . W) h2 A& I. U0 x
//打印容器vector/ b: K) v8 N7 M5 C6 v
void print_vector(vector<int> v){! N6 q* f7 ?. z) X
        if(v.size()>0){, S# Z4 l; p* q; _9 _
                cout<<"{";  
/ M1 X2 m) a! C/ p* w                for(int i=0;i<int(v.size());i++){  
, o$ k! g- ~+ r3 K                        cout<<v<<",";  1 Q, m& y  Q# K/ B/ K3 O' j
                }  
* u+ D% r# y8 L! S5 N                cout<<"\b}";  - g; E" `' s$ j0 A. B7 {1 B3 i
        }0 C9 v" O. q8 q5 C0 J/ w6 p
        else{" j$ G1 _4 v3 W/ _% u8 q
                cout<<"{}";
7 ^, h* B. L* J" Y; w        }
9 c" d2 _9 [: q  j. o% d4 k! \}' ]9 H: |4 a3 Q0 e8 L( Q
( l0 A1 g0 q: |6 r2 w
//容器vector中元素的去重/ m) G! w3 E" b% k3 R
vector<int> unique_element_in_vector(vector<int> v){- H- M9 n# u/ ]/ i) u6 Q4 B. r
        vector<int>::iterator vector_iterator;
+ V/ T' w  S/ I$ L/ n        sort(v.begin(),v.end());
; F) q* W; i4 X9 D        vector_iterator = unique(v.begin(),v.end());1 y( f; S$ P5 Y! z- u! h
        if(vector_iterator != v.end()){$ u  N. Q5 V- y
                v.erase(vector_iterator,v.end());, h+ P/ N0 H9 U0 E
        }" [. ]- {, \* \3 w2 v. f
        return v;/ S1 A# j) A2 T( {' }& n
}
+ P9 {/ l% y9 F) @8 c  v
/ U5 v* ~4 ^" g& m: p& k//两个vector求交集; j+ T- p! i( w! a: E/ z
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
$ A* f0 _8 L' x3 i. n. p! ^        vector<int> v;2 j+ X8 p4 f+ U1 W' u
        sort(v1.begin(),v1.end());   
. U" k9 n9 F. G3 H9 k+ H) ?9 F' r0 _        sort(v2.begin(),v2.end());   
+ y; F. k) J( B" e7 k; E2 {& [7 ?5 a        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 4 Y. S& F  p; d+ r- I  L' Z: }
        return v;
- l+ A. O5 m! G}8 N) I6 G7 ~% r" I6 p
2 S% _' w3 w" m! {% g6 a8 }3 v
//两个vector求并集
! N9 h4 [- e$ D" y- B1 h: V, uvector<int> vectors_set_union(vector<int> v1,vector<int> v2){9 O: E. L5 a% h1 Z% V  p" u9 a8 W
        vector<int> v;3 X9 b2 [5 L7 {  ?/ Z$ B* O, c/ S0 V
        sort(v1.begin(),v1.end());   
2 c& c4 N, N0 b" ~        sort(v2.begin(),v2.end());   + e+ m- ?8 w) O, o# X% a$ w) T
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 ^, o# z( Q; j+ Y6 o( W
        return v;
( v9 U5 q  W+ E+ V}' p- e$ E: v" T; E  h7 G

  `7 V* Q1 N) C//判断vector的某一元素是否存在
7 X; p  }+ b3 |8 l! B" ^  ibool is_element_in_vector(vector<int> v,int element){- k+ z( j  p# n7 ~
        vector<int>::iterator it;
* ?2 E( |. R- }: e8 c4 |        it=find(v.begin(),v.end(),element);
% @$ ^3 x/ x6 S" U        if (it!=v.end()){* g0 U( X8 B2 l' \1 D& `
                return true;
  S& d9 A- V( E% _9 K5 w/ z        }) K3 }3 l0 C6 k0 l" U7 k, k
        else{, ~% e5 c' m0 k9 n) }+ U
                return false;
' {. d9 V% O6 n        }
& h4 T. ?3 \7 j+ Z6 Y}$ l+ G' l; w- k' V/ {3 \  g) W3 m! J, j

" S! |( P" {3 ~int main(){
' t: X4 p& t9 N% e        vector<int> v1,v2,v;
) d( R( a% j) W, N- u  f' V& h$ s        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);6 _$ J9 W* v3 v; s# |
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;9 b$ w& L% ?, o# W  v% U
        cout<<"对v1去重:";
! l! E7 m* C+ r7 G- @        v1=unique_element_in_vector(v1);
+ c' d* ^0 [9 n  x        print_vector(v1);( K; O$ G% N0 p6 X6 N3 r' r
        cout<<endl;
4 u8 f0 U" x% Q4 ]; [1 k* M        cout<<"求v1与v2的交集:";1 _8 }: J0 }+ `0 x
        v=vectors_intersection(v1,v2);. D; F5 [) }9 l4 w
        print_vector(v);& F+ r& [3 e; X0 v! i- c
        cout<<endl;
. E6 I' C1 D. G( I, ?) G3 F        cout<<"求v1与v2的并集:";2 `3 a( E) M% j5 {$ V* x
        v=vectors_set_union(v1,v2);
( O( s1 O- a1 h, b% s1 `, X: {        print_vector(v);* r  b' V, a' d
        return 0;
4 z7 l5 k4 X) Z2 k}[/mw_shl_code]
* c; `' m7 R$ j7 L- ^. C
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了