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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

( Q' z; M8 @& C; s+ k5 F% ^5 ?+ j; s  J) r
, `3 P) ?* O" i( m4 ~+ EC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:$ l# K& t' {* W- \. _; _6 K1 y% H# O
[mw_shl_code=cpp,true]#include "iostream": U+ N8 d# Z; m6 x8 m- a) P. Y
#include "vector" 9 V: I' k  K4 [
#include "algorithm" //sort函数、交并补函数
& R! \5 J7 x/ K) f' b. i' q#include "iterator" //求交并补使用到的迭代器
8 D6 X* Q- H, I/ `using namespace std;
  h& m& T, b; `) i9 g
% Y# \  G3 q1 D- J//打印容器vector& N. }3 z* [( E8 C" M0 h
void print_vector(vector<int> v){2 C, F6 ^  i6 W" A
        if(v.size()>0){
& c. Y7 ^: x- `' q                cout<<"{";  : Z& F. E' U. @7 V
                for(int i=0;i<int(v.size());i++){  
9 S! Q/ e* q  N; c                        cout<<v<<",";  
! n* K/ a5 D, @; o  R9 r! c2 H                }  
! O6 D" Q6 Q+ g+ q+ X& Z                cout<<"\b}";  * i; [& \- o/ C) E; B6 @
        }( f1 Z# H- y& Q# v% l; x  [
        else{6 U, s( v* S+ Y9 L1 C1 a6 Z
                cout<<"{}";
) g' \9 [3 ?  m        }8 \  m0 ^( R  @; h; |2 s0 l' B
}6 y' y8 [1 S5 {! f) l# `' v

" c6 K* |/ _( R9 K+ M//容器vector中元素的去重7 ^: C+ v& c/ ]4 Z6 I
vector<int> unique_element_in_vector(vector<int> v){
% u, |2 q$ z# F0 j5 e4 m9 S        vector<int>::iterator vector_iterator;
' r+ D- g* a  p0 j" F        sort(v.begin(),v.end());
, S  g) p% ?3 _        vector_iterator = unique(v.begin(),v.end());
+ _. G1 O9 W0 u, ]: Q        if(vector_iterator != v.end()){
9 E8 A$ V) {7 L& c, B6 [, u                v.erase(vector_iterator,v.end());
. F+ N$ e* K! N  f. }        }  F/ O9 t& ?% R' I1 K
        return v;% H8 F6 I2 o+ `5 t7 J
}
+ M3 z7 G  y) y2 n + B5 k7 c2 m- ^$ k
//两个vector求交集
& N8 W6 i2 O" U/ o9 mvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
1 k0 \$ {( P4 p0 W. V        vector<int> v;
( A. {6 T2 R2 m$ B5 \        sort(v1.begin(),v1.end());   
# M) q2 ^4 C: Y        sort(v2.begin(),v2.end());   5 i6 b9 ]% c$ C' O+ a
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 . J9 z% }, y; d
        return v;
1 {4 D. H* ~1 \1 U5 s9 v; H}
% I5 q% O& q0 y
& p0 Y' |6 f6 F0 K//两个vector求并集4 B3 [$ o# c$ P& I4 d7 O5 F
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
+ t; ]2 }2 Q) P% |* s        vector<int> v;* u; N3 N% W5 L0 X
        sort(v1.begin(),v1.end());   " g6 F! t$ ^- t/ ?7 p* T- p6 E
        sort(v2.begin(),v2.end());   
3 H1 L* D4 p: U8 w2 {# v        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
' f' T! Z) m: ]5 t6 D* z        return v;
# D. H5 [! }3 n+ J5 s" H( J}. J* Q2 e, w4 E2 D9 u) ]) L
) ?4 r* _2 ^/ i+ R1 g* @
//判断vector的某一元素是否存在% _3 Z( U( n  A% B. {1 D: V/ v
bool is_element_in_vector(vector<int> v,int element){( B9 {! L" U; X6 Q- F, U* ~/ t6 |- F
        vector<int>::iterator it;: c! w: h1 y/ |& n5 G
        it=find(v.begin(),v.end(),element);
3 N7 d/ K0 Q# d8 i4 F        if (it!=v.end()){
5 k/ y  b' d# x* ], ?# j& v                return true;
, V) y# v& r& Z+ q+ Z. w! i        }" H, }6 O& j% J. {9 e% |
        else{/ r' t, }. h" J; n% ?- A: x( c9 V
                return false;
5 V9 O3 \/ X. }# U3 y        }5 f0 M7 z, S9 m% y# m7 h
}# u8 g* H: M1 g; n- {1 T

' E$ j& v4 y8 ^7 Yint main(){  x- x, z( E: K& u  _! C2 l/ g
        vector<int> v1,v2,v;6 E; o  D2 d; K) ^) Z
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);" j* S9 a3 R. Y( N$ o
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
1 O2 R7 L  b4 H9 h+ A( U! |# Y        cout<<"对v1去重:";+ p( k* t  K/ M$ l5 R& Q+ b6 L, ]2 I
        v1=unique_element_in_vector(v1);1 d8 C6 b8 Z9 H
        print_vector(v1);4 q5 U6 w4 X  h8 G' @) ~
        cout<<endl;
; ^0 Q$ q# G/ T6 w        cout<<"求v1与v2的交集:";
4 K  j" b5 a2 S2 Y! |        v=vectors_intersection(v1,v2);
2 Z1 p: G: ?* y  c) m2 \        print_vector(v);- m1 x8 a8 T+ I
        cout<<endl;
; Y8 W( M  G8 {/ b        cout<<"求v1与v2的并集:";
+ `8 q" y9 `0 N1 `& @1 s' `; v        v=vectors_set_union(v1,v2);
( u) o+ t3 g$ M0 }& V        print_vector(v);
) G$ r% p* q) k        return 0;
: P+ g2 U: v  I7 J3 Y* O) Y, S}[/mw_shl_code]
9 ~2 V7 R( Y+ N+ A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了