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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
) x8 S% x! o  J$ O: R8 l9 [
& s+ L% ^* S+ }, N: s, R0 s
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:+ P; Y/ e9 ^, ?6 V; |8 R
[mw_shl_code=cpp,true]#include "iostream"5 e  @6 T5 k) I* X0 |0 U
#include "vector" 9 i( |. J& z5 c! [7 F
#include "algorithm" //sort函数、交并补函数$ q. \' S3 j- @  q, U3 f
#include "iterator" //求交并补使用到的迭代器
7 u. B1 r: c# M: Dusing namespace std;
2 \, C( @# u3 v9 {# s   a, f) u% a1 T" o" y6 G* v+ i
//打印容器vector
3 `9 F: Z6 y) X+ {1 b+ r. A: P6 ^% L8 jvoid print_vector(vector<int> v){: Y+ S' T' h' F. r0 Q+ ~  X6 J
        if(v.size()>0){1 s" D7 M- E  f" z& ?# O0 d  H
                cout<<"{";  : Y; N( Z; B: R  {% U% f+ o
                for(int i=0;i<int(v.size());i++){  % `. K# _0 n1 h7 G* ]
                        cout<<v<<",";  
5 l2 _" i$ M# Z4 p0 Q3 A                }  
1 b% [$ R# y: K, [+ G5 J                cout<<"\b}";  ( ~. j1 Y' n2 c* J
        }% l1 h* D8 N, e# T. F
        else{2 f0 p/ s7 N" u. Q% |* J
                cout<<"{}";% A  W* b1 h' [+ @! L7 l* D5 P, R
        }
" h1 B2 w, @5 |}
3 j: J8 w; C; w" |% S  `: k, S
" A/ Z$ F& [$ T- E# l( [//容器vector中元素的去重
/ i. A! P, F1 b1 _* R9 Jvector<int> unique_element_in_vector(vector<int> v){
7 T4 ^2 ~! C* ]0 O: E        vector<int>::iterator vector_iterator;& D7 P, @5 C/ `: o3 y  U' M
        sort(v.begin(),v.end());
) n7 I9 H# i% B; n! K0 Y8 Y& }* `3 p        vector_iterator = unique(v.begin(),v.end());! l/ V8 _4 |2 w( U: n
        if(vector_iterator != v.end()){# ]( Q) f) a2 A4 X* x7 Y* i
                v.erase(vector_iterator,v.end());
% \$ F# h5 W6 c$ E% J8 b" o  p        }
- e$ J& j" M$ ^4 F! u; s        return v;) L' ]  R$ c/ b- R7 h: Q" F2 E
}
' J9 ^0 X+ M& {' Z1 m- X) M
) m% c$ j$ k2 l3 M$ `( P8 i! S//两个vector求交集
9 i' ~, P' e5 s# B5 J# x" W" P3 Cvector<int> vectors_intersection(vector<int> v1,vector<int> v2){/ ~3 G  E' q# _, X9 Y$ S4 v
        vector<int> v;
5 Y$ S2 l  j, h) X+ l% C; Y        sort(v1.begin(),v1.end());   
' o7 g6 S  w# L$ _$ B        sort(v2.begin(),v2.end());   
! a/ \9 }' P! g! f; ^" G- _) O        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
+ U! K' i1 E2 G$ u* H        return v;
$ q) ?; v) t* Q6 `8 s3 U}- K2 _, i: M* K3 [
. f% ~( k7 J( u: ~: Z- e" C
//两个vector求并集
5 K% z3 Y) v9 d9 Q; G/ [- v; xvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
. B! S0 P) U/ K( d3 C        vector<int> v;
" t  n  }6 l+ {3 D( d5 \        sort(v1.begin(),v1.end());   
9 b! }* y* ?7 _& W$ G! g; M- U9 U9 a        sort(v2.begin(),v2.end());   2 W) |8 |5 I5 M7 {& d' a3 \
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) z5 \4 o3 h: R" j0 G1 k) T        return v;
% D& d4 l+ k9 T0 p' x}
* K) O. [: O0 ?  N* G9 p
$ K  c. n# }" V5 N//判断vector的某一元素是否存在
* ?% o% o/ R3 r5 V* Cbool is_element_in_vector(vector<int> v,int element){# G9 ~1 T0 L3 C! e4 O; R
        vector<int>::iterator it;
% I5 P# q: Z6 C        it=find(v.begin(),v.end(),element);
1 f9 ?3 b6 J  J: z1 A& N        if (it!=v.end()){1 r: O4 s- Y3 _( ]$ N5 X
                return true;  b5 Z) A  E5 e+ |( R0 N
        }$ n( p1 l. c( d  o
        else{2 j+ b+ ~1 o  K) ^5 v
                return false;
6 A! P$ P! Z- @- z& f3 h- ]        }3 B1 N( j" K3 N8 H
}0 G. C+ u- b; y8 n4 `6 z

- Y' {( ]9 a" j! m# A9 ]( p$ b7 Nint main(){
/ `+ D0 u7 ?4 H8 c5 Y- [+ M& i        vector<int> v1,v2,v;' V) e# ?: N. `; B8 }6 H
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
- m/ ~' }3 \6 ~1 z& @8 C        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
% C! e9 T0 f' r9 h7 h4 }5 B3 K- A        cout<<"对v1去重:";# }: T4 P+ E* P* ^/ V  o* T' m
        v1=unique_element_in_vector(v1);2 ]* t; z0 X. |% t" W
        print_vector(v1);
; n' a/ t0 E( Q        cout<<endl;- i4 G' e) B  d, r/ o
        cout<<"求v1与v2的交集:";
, |; V- l' s8 q8 r* |3 @        v=vectors_intersection(v1,v2);1 u! S, n# A7 {8 X
        print_vector(v);
1 k, a5 |9 }+ w( s        cout<<endl;  b, x1 e! m9 d5 C9 [. Q# V" Z
        cout<<"求v1与v2的并集:";' {0 a; f1 J/ Q1 z3 s: ^2 G
        v=vectors_set_union(v1,v2);
9 f# c  k$ Y4 Q/ h        print_vector(v);8 F. p7 S9 F  d4 x# }/ H) i' ?
        return 0;( L, V6 y7 ~5 {3 G5 m/ F
}[/mw_shl_code]
+ y. x8 Q6 L+ ]% W! O
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了