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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
  `4 N& O( Z% X. k; T
- d4 D; `& X2 ]1 B! ~! |6 d! F% W4 Q
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
  T* z2 U4 `$ Q7 Z6 b8 R[mw_shl_code=cpp,true]#include "iostream"
1 S. Q' p9 u7 O( t% @6 q+ G#include "vector"
6 I1 E& q2 s: j% [: C6 |#include "algorithm" //sort函数、交并补函数: B# o$ Y* C; c# B4 ]
#include "iterator" //求交并补使用到的迭代器5 |  }; J( ]# V% L: Q2 q
using namespace std;
1 @% w" e$ w4 E" a* j7 A- ]3 e
- ]  t" e9 n% J2 v4 \( X+ a; u//打印容器vector7 E8 `& u% W' p
void print_vector(vector<int> v){- t  }8 h" i$ p3 _0 ~
        if(v.size()>0){' x7 J0 h* x/ ]- e4 d
                cout<<"{";  
9 q$ g7 V5 W; ~' s$ A: Y0 U& H                for(int i=0;i<int(v.size());i++){  . m' M5 l: E7 D/ K
                        cout<<v<<",";  8 @  Z' B9 S6 I& d# R7 n" I, R* y
                }  8 l7 A8 @) \; H$ ]5 ]. J2 p2 I; u( k
                cout<<"\b}";  
7 M4 f% z1 d3 H0 P$ Q1 j; P( X        }) C& A, a3 g- x" {; _; Y' ]) L
        else{
% C) V8 H# @5 a7 ^- q% \                cout<<"{}";
7 ^+ e+ b& j/ U. o- w9 \) o. ?        }" ~8 {8 v, b$ f8 \- T5 ^  l
}
0 }# i  q2 V: o0 W8 ~
/ e/ d& {+ @! w& u//容器vector中元素的去重0 O1 ?% M. H. z8 K  d. p  i+ r) F
vector<int> unique_element_in_vector(vector<int> v){
$ J- {; z9 x. K0 o        vector<int>::iterator vector_iterator;
$ j' x2 P0 L6 R; R# S$ N        sort(v.begin(),v.end());
! ^6 b6 u" E* N$ R' x        vector_iterator = unique(v.begin(),v.end());
1 P( X' x4 {. j- ^/ j: \: M" k        if(vector_iterator != v.end()){* }' l0 @. P6 a+ @
                v.erase(vector_iterator,v.end());4 l$ h' K* s2 O% R; d% B) G9 @
        }
" k- [# ?- S- m* S        return v;
/ a1 t6 `: d2 P6 i# q}7 M/ V8 a* G" \; w8 w: Q* z
/ [( f3 Z" g+ {: R$ J4 l
//两个vector求交集
& X8 J1 ^/ e3 M5 ^. U3 fvector<int> vectors_intersection(vector<int> v1,vector<int> v2){! M, W/ Q7 P, p' ^( n% \) B  D8 R* j
        vector<int> v;- S3 O7 y$ V3 T2 _
        sort(v1.begin(),v1.end());   9 [- r. T4 t/ _" Q; i9 Q
        sort(v2.begin(),v2.end());   
$ T4 _* x% b" U( k7 f        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 % b, w' W: L. h! J' ]
        return v;8 r* i5 ?4 y+ P" w' z, f
}+ U' j& h& M' ?8 \
. @0 k- k9 f: Z) H  L+ u
//两个vector求并集
- N' g9 R7 C: P/ y, }# _7 Wvector<int> vectors_set_union(vector<int> v1,vector<int> v2){: G  v+ d* I. C" Y, |& u
        vector<int> v;2 _: U0 M: T' U: f" q
        sort(v1.begin(),v1.end());   
( l8 ?' p5 r4 K0 B        sort(v2.begin(),v2.end());   
. ~9 _* H* T. `" V: n* N+ R1 m        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 . x$ v. l5 r/ j+ `* n! X$ g1 B
        return v;/ s1 N! W& K7 N7 |2 H" {
}. G! N1 E: k% l5 e3 L% [/ }
. o' R) O7 M0 a) y0 b1 @
//判断vector的某一元素是否存在
& u8 w) ?% z4 N9 u: abool is_element_in_vector(vector<int> v,int element){
7 {& M5 t: _1 U! T$ S        vector<int>::iterator it;
% ~$ ?" d4 R# J$ V# F        it=find(v.begin(),v.end(),element);* Y" M+ G9 @9 x7 S; X
        if (it!=v.end()){
, k6 B" p: b  Z8 N% Z                return true;) J% o. }0 l$ r! h. {: W: |6 l7 X
        }  g( z( H: t3 Q; N; R
        else{
1 V$ ?' L0 U! H" ?9 T2 b                return false;
6 N1 E% I3 w8 x8 ~' i( u& A        }, Z' r5 l2 \$ i. L
}7 u' c7 L" h  u, ~- D; H/ S

. s' j7 e/ i, A( I+ e) Vint main(){8 c7 v+ J  c+ u+ A- G" q1 J
        vector<int> v1,v2,v;3 ]! }( Z& C+ W9 V7 h9 a% j
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
  [. a1 x- \: y  x        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;! p" n5 K4 v, i0 n
        cout<<"对v1去重:";
$ Q1 K3 }# f- H8 M        v1=unique_element_in_vector(v1);' \( b; I$ X! I
        print_vector(v1);7 R2 M/ i; e- F6 h7 S2 U, x
        cout<<endl;& s8 ~0 f& Y, o, O* k
        cout<<"求v1与v2的交集:";
) H  v) B& g5 D0 v% \. i. E        v=vectors_intersection(v1,v2);6 U  c0 e8 u2 H# y9 g
        print_vector(v);% I6 x3 d' I: Q3 V; {) P) f
        cout<<endl;
9 k/ e4 }4 k1 C: f, c        cout<<"求v1与v2的并集:";
* Z5 u+ D2 {6 m6 @' J( W        v=vectors_set_union(v1,v2);
2 p+ A% a" S+ ^        print_vector(v);
; @+ }7 j  M. G+ j        return 0;9 Z- H5 q+ _' }5 G7 J
}[/mw_shl_code]
( ]% |' m& Y. n' d! ~8 n
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了