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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
  r$ Z& H1 C, }5 w( @+ A4 ~) C

5 I/ u; x# T3 i1 A0 X4 hC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
( y8 S  j3 x/ I2 h+ r[mw_shl_code=cpp,true]#include "iostream"3 ]! e, N9 @4 i( o
#include "vector"   \' V  C0 T( O9 k1 z( M
#include "algorithm" //sort函数、交并补函数7 ]0 l4 T) l/ Q2 }6 ?
#include "iterator" //求交并补使用到的迭代器& ?/ U9 v9 g0 o  X7 z$ ~# ]
using namespace std;3 |8 d2 ^. V6 A0 z- C6 U/ J
- {0 B" u% {& T7 m& p
//打印容器vector5 e. M" v9 |  Y* q  u  j4 H7 Z
void print_vector(vector<int> v){
4 F0 A' N4 A! p8 B- c  l" n! T        if(v.size()>0){6 e" r2 K; \) A1 s' m  j! D- b
                cout<<"{";  5 l' n; P, ^& {: I' q/ X! ?3 j9 C
                for(int i=0;i<int(v.size());i++){  1 d# n+ w0 b9 B
                        cout<<v<<",";  
8 |5 r/ N, R# a                }  
) C! m" H8 Z9 M/ e                cout<<"\b}";  
. ~( M4 p: @1 ^7 A3 R9 b        }
/ x+ ^2 Y! S6 O! T. O/ N0 B1 O  c        else{8 ^) }7 W% c5 T+ V. B
                cout<<"{}";
9 o& ?7 q, V% x# _6 b* w6 `        }+ o- d/ q  _5 E' a7 \8 c2 {
}* N7 K" f1 P, i& l# S! T( Y" |. n
& H5 f) Q8 C/ R6 h( M1 A
//容器vector中元素的去重" x! s- O# r: v" @$ i
vector<int> unique_element_in_vector(vector<int> v){
; }  m! c% k7 ]. D" S2 N& ~        vector<int>::iterator vector_iterator;: [2 D9 o% ?% f, K1 N
        sort(v.begin(),v.end());
1 q3 \4 \) l$ l        vector_iterator = unique(v.begin(),v.end());
% E' H9 k9 \; O" C3 t, Z        if(vector_iterator != v.end()){+ t% l4 f  ^. `, z8 }/ R) Y6 n8 F
                v.erase(vector_iterator,v.end());4 y9 K3 C& N/ a0 g, Z0 F/ B
        }
' o$ K: g7 ?" I7 U' {9 o7 c2 P        return v;
* U/ {; c  J) Q5 T7 V, F$ I& c}/ [9 |& A6 \) F. p) L) }+ C. q# X5 G/ ~
0 x3 b- e# X. c, q$ c  c
//两个vector求交集
+ M8 o0 T! M4 wvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
, m0 T# B$ }8 S' b        vector<int> v;- W- W5 P( i, ]  o0 V
        sort(v1.begin(),v1.end());   1 h  i- F: Z4 x: v  F7 `
        sort(v2.begin(),v2.end());   
4 l& g. v) N, T, d) P- p% `6 F9 r        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
; \+ a" W* U! ?9 s) e        return v;
5 h4 X4 R& X4 o5 [}
) o" f3 X3 |7 X9 k
5 q$ G. n; s! L( e* n//两个vector求并集
2 U/ V) R; Q- V7 N4 P) Y; mvector<int> vectors_set_union(vector<int> v1,vector<int> v2){' a, m' p' D" Z+ X. a
        vector<int> v;
6 O; |1 j( v, f9 e8 T! U        sort(v1.begin(),v1.end());   
0 h+ d& p: @! U9 {6 Y5 G" H4 X        sort(v2.begin(),v2.end());   3 F, G0 `. P; e6 L# Q- E
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) r! F( p# O8 N$ C1 ^: N" {( U- E        return v;$ v, p. F; l  |- o8 O4 A
}5 Z! ]. o8 N$ _
5 j* Z$ F2 O, }) f7 r) \$ C
//判断vector的某一元素是否存在' V+ V( Z' o8 E1 n& v
bool is_element_in_vector(vector<int> v,int element){
4 j' u/ x" i7 a: Y% W        vector<int>::iterator it;! Z3 d! F, \: k2 s6 E+ [
        it=find(v.begin(),v.end(),element);  V6 m4 h; ^0 Q. q
        if (it!=v.end()){0 o1 z1 r; C/ A
                return true;
' |7 K4 a2 |+ l, p, L. \        }- }" r* W; w& O3 ]4 M5 Z7 F
        else{4 h. D4 b/ `, O+ n
                return false;0 I; Y1 _6 s  t/ q: v/ T( x" y5 y
        }
9 A3 b2 ?$ r+ y}  w9 D, S- b3 J7 i5 a0 y! L0 Q, o/ c

6 N+ k5 E3 v# z  i9 ]- s! S% Rint main(){
3 v; c4 r8 W. o' }        vector<int> v1,v2,v;# Z/ j' Q  A( `3 T0 n0 r. Y- }8 w% F
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
  U0 t! \' l( F3 W% j( ^        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
5 f: F% @& |# P$ [+ W: ]# M: ]        cout<<"对v1去重:";
3 |& B" S" O  [7 H        v1=unique_element_in_vector(v1);/ k- i* U& R' Y/ Q+ N8 W
        print_vector(v1);
/ o8 d% ^4 k' x0 i& [4 i7 f' N; [6 L        cout<<endl;
5 t2 X% J0 q/ c# p! p. Z        cout<<"求v1与v2的交集:";
% S% ~5 \; M; z$ u  }& K        v=vectors_intersection(v1,v2);
+ e& K" p& \0 D5 D0 u3 ]        print_vector(v);1 m0 C6 b. Z5 k) g
        cout<<endl;0 g1 I) N% O# v. a3 Q# m
        cout<<"求v1与v2的并集:";
, b4 h; u. k  d7 f! s) K) \        v=vectors_set_union(v1,v2);
' _* Q6 j0 N1 g2 J4 U        print_vector(v);
; m4 K& }1 j: e: l        return 0;
* o, f: P! D) f6 r5 w% M9 D! o}[/mw_shl_code]9 u# G  g: ^" H" K
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了