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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
1 p( E0 Z' B1 B5 i( S; Z4 H
" D) D; Q3 B  Z: R; L
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
4 I- e) H; d: l7 ]  i[mw_shl_code=cpp,true]#include "iostream"
: z+ Q) F* l' W#include "vector"   F( F: g2 W. @0 p: n8 D
#include "algorithm" //sort函数、交并补函数
! ?9 V2 \' k0 Z5 R2 }- ?& J% }' V! P( d#include "iterator" //求交并补使用到的迭代器& y" l# T: b# k  |
using namespace std;
' L( I" _- X# p$ T( q 9 x% W6 o4 a+ D/ a
//打印容器vector% o: M# L; E6 X# r. L6 m6 V
void print_vector(vector<int> v){
# D0 R' g- G7 A. |        if(v.size()>0){
7 J; W0 r1 @9 j. {; l8 E4 g9 Q% f                cout<<"{";  - h$ v8 s, J( p- a
                for(int i=0;i<int(v.size());i++){  
" |5 {" Y5 Z0 @- @0 o' P                        cout<<v<<",";  
; D0 h& s( g2 Y4 e1 C. T                }  ( f3 X  `4 j) x7 G
                cout<<"\b}";  4 a; M7 d% \, D, T
        }7 \" V3 i0 }- Y4 F
        else{
% t' L$ u, y; a5 i                cout<<"{}";
1 o% d5 A# c9 B- j8 [( c2 Z        }  x- w5 M& h+ P! ]0 t1 ~3 v4 D
}
6 L7 z1 m5 a. P% T2 x# [' P6 {" s
4 b" ]! J, q) c- M//容器vector中元素的去重+ E  ^2 T/ Q. o+ i0 G
vector<int> unique_element_in_vector(vector<int> v){; Y6 {5 m' A7 v/ ]$ J1 E
        vector<int>::iterator vector_iterator;
+ m! S& E% F- e" U; L) ~        sort(v.begin(),v.end());. C% i. x2 \( k& ^/ w
        vector_iterator = unique(v.begin(),v.end());' F  J2 j( P! N4 J+ f! ~
        if(vector_iterator != v.end()){  K' z7 J1 G3 v' [# X7 O
                v.erase(vector_iterator,v.end());, m0 h$ s, f: h3 C: t) S, y% C
        }
! V4 K9 [) N/ ~2 v        return v;4 q" i6 ?, [! E" h& {( Y( Z
}7 T7 `) s  r+ y1 m3 H/ }
, R- S# _  P" E5 }0 J1 m8 T
//两个vector求交集' p0 t% q, k$ |6 P1 j: g
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
* _; O9 `- n+ F6 H0 i$ P0 g0 d        vector<int> v;
: g+ D0 s- p# T. h        sort(v1.begin(),v1.end());   4 u) [  C1 f. O% m5 O
        sort(v2.begin(),v2.end());   / }  O# @$ V2 `* }
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 * K2 k# T) {4 W$ Q+ K- j
        return v;/ k1 Y1 M8 I$ X9 a
}3 D, A! _' _' ]7 _
. r( z9 ~8 q/ }* o
//两个vector求并集- E" |7 D) K0 f0 U& A, S3 l
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
* h* \' {% z* L! m+ _( y8 a        vector<int> v;
& P6 ?0 m  B1 }# D        sort(v1.begin(),v1.end());   + k0 W5 `# V: q. x0 t$ }1 n" p
        sort(v2.begin(),v2.end());   
2 ^$ |0 t5 B3 j' ]        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ' z# _/ \  [( i
        return v;. c: k9 P+ ^& W. a- Z+ _6 ~" C
}
0 A3 V3 B) y7 s
/ D' K2 a5 h) z) g# G//判断vector的某一元素是否存在5 q$ F, Q2 \' ?# N3 E7 a: e
bool is_element_in_vector(vector<int> v,int element){
8 N  n- M: y" ~6 @  h        vector<int>::iterator it;# @# N3 `9 R7 @" H* i$ u
        it=find(v.begin(),v.end(),element);
6 ]1 Y8 W" ~- `5 D7 Z        if (it!=v.end()){
/ L1 A! \. w( U                return true;
. M4 x7 l. b# O        }
4 `; e$ s! I6 O9 R        else{
6 b. p9 @7 T+ `  s7 V. k                return false;* Z2 G( ]4 I" H- h. r" p8 a
        }& {' c8 w+ l8 S. y0 `/ S+ ]
}
& [7 n( G; j- s' ~, ? ; S+ e0 M9 K. G, ^8 p$ Y
int main(){
$ V: Q4 m+ ^2 X# z# h/ b: a        vector<int> v1,v2,v;
/ U' |& J) ^4 O: i        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
4 z: n" \6 s4 s. T) O7 _        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;6 W& W) S  s3 f
        cout<<"对v1去重:";
+ g! ~6 c# Y1 ]  N- u        v1=unique_element_in_vector(v1);6 l2 V6 i% w: Y. w
        print_vector(v1);
( \/ A* o( b, _2 _1 i$ P- q        cout<<endl;; ?9 n- W" ]% U( Y/ M
        cout<<"求v1与v2的交集:";
3 o# E, t9 B8 p3 {        v=vectors_intersection(v1,v2);1 Y$ d* C3 t7 @; x6 ^2 G
        print_vector(v);
; W1 w$ N* e7 t7 \5 ?: w        cout<<endl;
3 t4 V/ g; P, u+ h        cout<<"求v1与v2的并集:";& `! h5 o$ k, f0 K( M& N
        v=vectors_set_union(v1,v2);- P7 @+ T5 j6 R0 a9 f, m8 r" p
        print_vector(v);: x6 I! V. q) k2 N7 {% p3 F2 o
        return 0;: A7 v7 Q' o4 `8 @
}[/mw_shl_code]
. @$ y- g2 B) |; N/ U. B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了