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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

% I; }" Y2 J! }( c/ V$ L1 p
7 b0 e. o7 D- ~C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
+ j/ Y3 c7 b9 H+ D1 O$ m( U2 {[mw_shl_code=cpp,true]#include "iostream"" J' M% a! \8 q5 H' ^. {
#include "vector" " E$ i# v0 J0 g, b
#include "algorithm" //sort函数、交并补函数0 g& o" r% ?* ?! b
#include "iterator" //求交并补使用到的迭代器* T5 B% q) L) r
using namespace std;# o1 l: P' a. |: o9 [' j
3 E0 Y, b4 P& c- a( r2 U
//打印容器vector
9 Q3 W& }- h# \* J; r  d% ~void print_vector(vector<int> v){& F) c  F0 g) [: H
        if(v.size()>0){
% m# v/ A/ p6 `6 b                cout<<"{";  + ^5 K/ k! H# L, q: @
                for(int i=0;i<int(v.size());i++){  4 \$ C9 i+ [- z4 R' d
                        cout<<v<<",";  
' ^9 H1 S9 _3 e6 A- ?, a- j                }  
' Z: O7 p1 h, B1 B( }                cout<<"\b}";  
0 d1 H% Q7 ?; C. v: }: n        }
6 ^4 ]+ \# E) C  S3 o4 p        else{# j; i3 A, r7 X4 Q$ s
                cout<<"{}";
" v# m4 s& Y" E- e7 O! m! y        }$ v" P- G' _2 u, F) a) T4 Z
}+ l* L3 ^/ d" \

8 m5 j, o, s  \" r5 ~" ]& |- p//容器vector中元素的去重. E( l0 k) ^+ q& m! a
vector<int> unique_element_in_vector(vector<int> v){
7 k: q! O8 I# J7 I/ q        vector<int>::iterator vector_iterator;
3 @' D' F- M5 g% F: D        sort(v.begin(),v.end());
0 x6 s: S. _: a$ Q7 v) C0 |: f1 K        vector_iterator = unique(v.begin(),v.end());1 r' m8 H) B  |" o% C( I
        if(vector_iterator != v.end()){
) ^. n4 z6 E) Y. F0 v6 f1 ^                v.erase(vector_iterator,v.end());
/ }& }1 a) H  C* m7 T        }
3 L7 ?, C8 W0 i) h        return v;( n/ v# X2 _0 R/ X( {8 P* ?+ \
}6 l. K4 A2 z6 ~2 W  V8 B7 \1 [

% H6 N* u* M1 W6 m//两个vector求交集0 I- `6 s5 g: p& D
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){, N9 P8 n4 J' A" T' Y( y* F
        vector<int> v;
7 G# ?, Y- W; h5 q+ b% a        sort(v1.begin(),v1.end());   
" x% ]& v* ?! r* q" P* {        sort(v2.begin(),v2.end());   7 S# q! w) _) F3 L# }) a: u2 C  \
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
$ f7 X7 s' m% z7 @        return v;0 p5 @3 Q) K/ M# Y, ]2 Q
}
0 d6 W: ]3 P# Z" a
* U8 M0 b6 p' d6 Z& R1 D- r, p; m//两个vector求并集
: {8 c7 ?" h4 b; l6 `vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
1 y, P* b: K' w        vector<int> v;. v' @' o4 n( A/ L; ?/ {# m
        sort(v1.begin(),v1.end());   8 U: n9 Y3 g% J3 u" S- d. P
        sort(v2.begin(),v2.end());   
) \5 P- ~" E+ J. d, E+ v7 z* Y+ c        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ( i; L" O7 D: X5 A3 [! m* L+ ?
        return v;2 ^7 k' }9 b  a/ G- |+ T% }
}
4 I/ X; K' R2 y0 n : N8 i: U: ?# Y" }: q4 |
//判断vector的某一元素是否存在
- S8 H. {: K- q: ?5 @bool is_element_in_vector(vector<int> v,int element){
- n, i" X( x2 ], Q5 _! ?        vector<int>::iterator it;. j0 v2 J) n3 r( |$ V2 ~; f3 ~
        it=find(v.begin(),v.end(),element);
# K7 P. t2 I( J* A4 f& u( q        if (it!=v.end()){  k- m* ~) k" H; v9 B. r) p
                return true;
6 B9 s- ?# G) I; B" l& }3 @, k        }' L, [0 U  Q7 Z* q  D9 v
        else{' e* w5 u/ y0 ^+ W5 S
                return false;
( L- P6 r$ B8 k9 o        }
9 O3 ?- E- W" a( }5 L/ K9 n}
4 U6 c& j# O; K' G, z" e3 Y
: t. B! D5 |* `4 v7 dint main(){
2 H2 ~6 ~! W) F        vector<int> v1,v2,v;
  \7 B6 h0 V* I+ `        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);5 ]0 p! \  ?, b
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;/ i; o  W" i) Z# f% ]! u
        cout<<"对v1去重:";+ K" K9 R# W3 v! |3 L
        v1=unique_element_in_vector(v1);" y& ~! Z* Q3 L( R$ w
        print_vector(v1);
$ [" D& L# C7 I& Q3 q# \* r        cout<<endl;9 p0 s& E. S% D0 }
        cout<<"求v1与v2的交集:";
( i1 }5 D. G7 m$ L& k& d; i        v=vectors_intersection(v1,v2);
7 b! A8 a, T, @( Z' F; w        print_vector(v);! ^/ i  ]% x. v" t" _; \
        cout<<endl;
5 u. P( ^  E( G- u. W3 d        cout<<"求v1与v2的并集:";
- {- X: V5 r* q- v        v=vectors_set_union(v1,v2);
. W. `) h/ N8 }: x' }1 Y) I# D+ m3 w        print_vector(v);
, g0 b7 S" a7 u' r1 z( Y        return 0;
3 p" @& a+ ?( w' e}[/mw_shl_code]
, R+ I, ]. O( w* ^$ ]
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了