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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

! W7 X- _) R" v  ~- a
! P/ U0 `% u# L; {$ ?# F/ s- [: zC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
  c  W5 V% `) u# z2 t6 v: T[mw_shl_code=cpp,true]#include "iostream"
$ f# `; ?" A' b8 Q+ Y& v9 J#include "vector"
# l/ c& o; K& S" T; d) k: K#include "algorithm" //sort函数、交并补函数
, [' e% e/ T4 f8 u# |#include "iterator" //求交并补使用到的迭代器
) V- S7 k: z5 |using namespace std;
; t+ d/ t. R. l
7 i( Z1 G; m. q' a% L. S//打印容器vector
# [) {1 v" @0 t1 Jvoid print_vector(vector<int> v){
% e/ c  K5 X4 f1 j1 M, R5 b        if(v.size()>0){! T6 v* @  o8 x+ \
                cout<<"{";  
! G" \; |; }- l$ @: R* R                for(int i=0;i<int(v.size());i++){  / _+ n; D9 o6 u( F9 j
                        cout<<v<<",";  
3 J' u5 J- S; h% ?4 M  ^                }  
. ]& B, e* I. @0 j: f) ?                cout<<"\b}";  + P1 `* _) [/ c/ Z* N8 n
        }' |  o3 K! h' `4 h3 |
        else{0 Q5 x' t1 g& w7 S8 R
                cout<<"{}";
9 j* a: T) V4 I& g& ^7 v        }3 m* t; w( s. z* N
}6 e8 i0 b" f4 n. d/ V, T# R2 u

' p  G" n9 ]1 e. I//容器vector中元素的去重
. s+ e2 m: m7 k; \2 P1 J+ y! L- Xvector<int> unique_element_in_vector(vector<int> v){
' Z" \3 v, x; G! b: d0 C        vector<int>::iterator vector_iterator;
8 ^' E) g. a) h9 x        sort(v.begin(),v.end());! r) c$ [; \2 m/ f3 a
        vector_iterator = unique(v.begin(),v.end());5 y# \5 f7 c: x. v7 _( r
        if(vector_iterator != v.end()){
' Y% k9 y+ d" O8 @- K) F. u5 X& q( d                v.erase(vector_iterator,v.end());
* G9 o0 q. ^+ f) Y9 C/ F        }
1 o' J- h4 _/ C# r5 k! M. m        return v;
& }  B+ h9 W4 v# o. e" E" y( L}
8 A# G8 F6 s1 G* a% x* D0 T
+ Q# w, G6 a) R//两个vector求交集
$ q' d, }% X0 Z4 u/ E- J& vvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
( ?8 k+ v4 {6 g/ u        vector<int> v;
  p. A: y# e5 w$ P        sort(v1.begin(),v1.end());   7 F+ W$ B6 i# h9 W9 t) e4 s+ ]
        sort(v2.begin(),v2.end());   
0 V. d2 `& Q7 z& o6 C: y        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 2 l- l! H* m7 T3 y. Y0 {2 B0 `5 Z2 `' ~
        return v;
- C' |& |7 q/ h. K% M}
) ?" A) o+ [+ g# n6 z' ]4 w/ d 5 `0 Z( L1 o9 }
//两个vector求并集) m+ f. g) w4 Z( W3 v4 K# p
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){7 b  L( X% q/ O; T4 j3 _) z
        vector<int> v;
: V% z6 Y; [/ m# _* F        sort(v1.begin(),v1.end());   $ x& D5 {' L: X& b* z
        sort(v2.begin(),v2.end());   6 i" |3 p# }  i% R$ J
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 7 B8 k  f) f3 M, D( i
        return v;
- Y) h- f8 B, C3 \% S% S2 q}) Y* O. _$ n) ]8 h- j! S
2 Z1 Q0 @) _/ p3 X  O
//判断vector的某一元素是否存在0 `8 w& n; l" ^6 P+ g5 g# E2 ]8 U
bool is_element_in_vector(vector<int> v,int element){
' \- t* D; `7 @/ q  J        vector<int>::iterator it;8 ]+ T2 k0 J+ q; q& Z
        it=find(v.begin(),v.end(),element);0 x9 Q" {/ X8 y( ?; T4 Q/ t2 Z
        if (it!=v.end()){
- d- M, R% u; e$ M                return true;
# r1 ?3 Z; A# x/ S% R" c, w3 H        }3 a# g: S( i+ y$ u
        else{
( p6 Z, `' {$ B( m6 B8 J, K) r  k                return false;+ |- k0 F/ Y6 I$ i( _+ K8 S
        }6 p) L( [' x  R( I
}
8 \, i! X4 \3 Y3 }4 Q1 A9 p# K 4 l0 Q0 \+ q5 |6 ?
int main(){# y6 i( j% m; D! Z% W6 `2 a& S
        vector<int> v1,v2,v;7 K6 L4 p1 \: q7 Y( S! W
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);5 L& _; N1 J0 }# r1 K7 e2 |0 a
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;, w) w# ~$ `" J  }& l% K
        cout<<"对v1去重:";5 Z2 J  K4 {" J3 Q0 r
        v1=unique_element_in_vector(v1);4 o5 C2 a. q& k! T
        print_vector(v1);
" Q5 c  l; \1 Q8 m        cout<<endl;; G% [, p/ t+ _, y3 C3 c
        cout<<"求v1与v2的交集:";+ S, u/ p) p1 r& i# w: M! X
        v=vectors_intersection(v1,v2);$ p$ I' S) Y2 \- x* W( N
        print_vector(v);
0 o$ q* k) p9 p  |0 ~        cout<<endl;
6 g3 d( q0 J4 N  i5 m3 D' j        cout<<"求v1与v2的并集:";
6 ~& v" x; [2 `        v=vectors_set_union(v1,v2);( |5 R" s, t* m1 h. [& M
        print_vector(v);$ o- ?4 p" G- s
        return 0;
  h6 I7 G! O: H}[/mw_shl_code]8 Q# F) b* H" ^
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了