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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

% G+ C! k: K3 ~' {$ b* s& u% ^4 V4 t' L8 x' Y- v+ N0 ]
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
) v- B0 b3 [( C+ O[mw_shl_code=cpp,true]#include "iostream"; c* `7 V( B( y3 @0 @8 z) Z
#include "vector"
6 L6 R6 Y% X) w! q/ w#include "algorithm" //sort函数、交并补函数
5 y  p! v0 G& R#include "iterator" //求交并补使用到的迭代器
: V* Z) m4 V! h! Pusing namespace std;, d/ V( c0 |+ \/ I& x4 I
8 J' O" u9 `) O' I: W1 b. c
//打印容器vector( ]( S+ Z( n' \. d
void print_vector(vector<int> v){
; m  S0 u$ H) |- d2 e. V& o        if(v.size()>0){
; C( K: N% Z$ ^: s, H, v                cout<<"{";  
/ A% D8 R3 _! }8 t. H/ y                for(int i=0;i<int(v.size());i++){  1 T3 d4 I7 n9 y# H
                        cout<<v<<",";  
, j' r3 \  ~) s: ?- z                }  
4 [& X) Z$ q2 H. `                cout<<"\b}";  
& `' e' o; j+ j4 E. P; a        }
) C4 F% m, x2 a. U7 R5 z) }' P        else{
1 a9 M1 l  A( f# L! Q0 h- D                cout<<"{}";
. k& x; a8 G5 s' J( X/ k5 W' X7 m6 b        }. ^: v$ i! h' X9 Z
}
+ U+ \1 W0 n8 c
. C! d0 ~* ~+ g+ d8 |/ N' N7 N6 s//容器vector中元素的去重7 r' z# Q: `) |$ y' [
vector<int> unique_element_in_vector(vector<int> v){) E$ u* _$ k/ g5 v# z
        vector<int>::iterator vector_iterator;% E  Z. s  b+ |' K$ ^
        sort(v.begin(),v.end());3 A$ V& y+ {( Z+ f! p1 G
        vector_iterator = unique(v.begin(),v.end());
3 J4 Q- }0 d, j3 q        if(vector_iterator != v.end()){- [1 t( W: }) M
                v.erase(vector_iterator,v.end());' Q$ h: C/ u; }/ }$ F$ O& Z
        }6 p- C9 M, z$ g' s
        return v;. \: p1 u3 F, b) {. g) w
}
1 c1 w- S) }, H$ B7 _4 e8 C! ` 8 @' `) z0 ^. Z+ A3 P; E" k
//两个vector求交集1 A2 J! h$ X+ ]) R$ J. V
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){. w' p1 H6 S- X# [: b
        vector<int> v;
7 n" F9 N2 ?5 h7 y2 s        sort(v1.begin(),v1.end());   
6 j7 ?4 c. Y% \0 O        sort(v2.begin(),v2.end());   
1 j" x/ z. J/ I        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
: }4 w' q6 y. I1 q: M. g8 |* j+ j        return v;2 m9 _8 |  T4 K6 t0 G
}8 Y  w/ L0 ?) e" M/ W3 n
/ H5 U- F" p" t+ f# a! U2 w
//两个vector求并集
% i. ~+ j1 Y; D4 J: x# b3 zvector<int> vectors_set_union(vector<int> v1,vector<int> v2){3 ~% L6 W: E* V( a; H0 k0 J
        vector<int> v;7 e5 r4 N* @; M! ~
        sort(v1.begin(),v1.end());   
5 x0 x& W: ?( [; e        sort(v2.begin(),v2.end());   
9 O5 q4 l5 n% n- _( _% e        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
6 i8 o/ G0 K! w" X7 Y' A: l        return v;) Y0 L1 D6 o, ?
}6 e0 D$ s( e, y( x0 C
# [1 U* N4 q7 U: z- p" G  L* h
//判断vector的某一元素是否存在# m( y+ g1 ~* G/ ], k' H" B% I$ s
bool is_element_in_vector(vector<int> v,int element){; S8 J( c$ x- F/ X: ]4 n
        vector<int>::iterator it;
7 U  e2 ?- }- r! J8 D9 p4 n        it=find(v.begin(),v.end(),element);/ k2 _5 C) k* u
        if (it!=v.end()){! ]9 V1 D/ P' `' H( u; i  }
                return true;% Q6 q5 V+ i/ B0 k5 V. b! M
        }1 C! V* V9 ]; U5 a7 D4 s8 N- ]0 q
        else{
# n' g2 S* I2 X- A: S                return false;
& o% H7 ^! \9 n& \6 e3 o. v        }; {) i4 a9 _1 m0 m1 j; G  A
}
+ H4 N. P& u, e; t7 ^6 i % L' u6 }2 U7 h+ q! ^0 p& W5 D
int main(){) |+ l( g6 j+ i7 l5 m
        vector<int> v1,v2,v;
# F5 w/ W: x$ j6 Q: \; A        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);  f" v  U: ~& A+ V/ Q1 R0 P3 x
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;2 n( H3 d6 o" R! I% \
        cout<<"对v1去重:";
8 N. W$ ^6 E+ ]; \3 U* d        v1=unique_element_in_vector(v1);$ u2 _* d4 @5 w' u! d9 G
        print_vector(v1);
5 N+ g/ @+ Z4 w- N4 r; k% S        cout<<endl;# I) x$ O0 n/ [2 N" [: }3 O: R" F
        cout<<"求v1与v2的交集:";
: z# ]' K) K. [1 [        v=vectors_intersection(v1,v2);
' d4 M: ^9 w# O0 ]  H/ U, B/ u        print_vector(v);$ O) q; A9 P5 B/ Q) }
        cout<<endl;# {) Y4 o4 w8 d3 t+ x9 W
        cout<<"求v1与v2的并集:";
0 ^2 O! L) t- r5 d$ m        v=vectors_set_union(v1,v2);
* C; |4 B/ n4 Y/ i, ]: C        print_vector(v);& r0 L1 n; |" A0 u3 r
        return 0;! h8 A, A2 l- |1 i3 |- k; k
}[/mw_shl_code]
$ A- [& [; Y# r/ R5 S. l: E4 h# X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了