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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
- \; D/ _! G) T6 s9 t

6 H2 V6 f- |0 J% n& o5 dC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:& T# @$ u. ^1 z  L( h4 N: U' T
[mw_shl_code=cpp,true]#include "iostream"  O& e/ O& Y- Y0 ?# S* v
#include "vector" " w/ Q. C+ _1 e& l$ ^. d9 R- V
#include "algorithm" //sort函数、交并补函数% ]$ i6 X, p& }; e- u) p/ p
#include "iterator" //求交并补使用到的迭代器, K4 h5 l3 g$ O; I1 }$ `! j2 U
using namespace std;, R+ F0 _, A4 ~6 `& l7 J

1 }+ n6 ~" d! |* ]; C//打印容器vector- i6 t/ y* i- G) o4 z' M/ ^
void print_vector(vector<int> v){
$ g: C2 [' e' P' A) w        if(v.size()>0){
- B3 Q" f* t" O/ S) N' I                cout<<"{";  
, O4 F6 j, Z: Y. B2 s1 e6 C& ^                for(int i=0;i<int(v.size());i++){  
" j; m4 I! V( i                        cout<<v<<",";  
& p7 `/ I1 O2 i& {0 l& i                }  
, u& F  j2 i2 c                cout<<"\b}";  ( t9 a$ C0 t) P& q5 r3 [/ \
        }
: t8 R* Y7 E% n& U        else{' m5 g# ~( R1 ]+ h" \# X
                cout<<"{}";
/ v2 A2 y) s3 W- H) a! c# Z) P8 g        }
$ m' ^3 ], k8 ^+ L; i}5 U2 c# k, p( g# x

# B5 l; M2 ?' J//容器vector中元素的去重* w+ [% a( h& p1 \" \
vector<int> unique_element_in_vector(vector<int> v){5 X! t  A) `: f: S6 T
        vector<int>::iterator vector_iterator;9 [- @2 w( j; N  P, l  U) ]
        sort(v.begin(),v.end());$ I% z* g1 b' a
        vector_iterator = unique(v.begin(),v.end());+ H6 b# d. K7 S; o4 G! }' p6 Q! n
        if(vector_iterator != v.end()){8 x' ~; [0 C* J7 n& I, [
                v.erase(vector_iterator,v.end());
) E9 y: O$ c3 c$ G( ?        }
( p; o" e% m% K& q% |$ P0 }9 k3 ?        return v;5 G. `* ?2 U7 F  T1 U7 m
}
4 T5 s2 _2 d# W. a) ?& e5 U + z8 h4 C0 L! |9 t0 d. i
//两个vector求交集/ Y; r  b$ E& u. H' q
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){& S/ X3 i! p" U
        vector<int> v;
7 H6 `) y3 k6 O4 x. ?  X        sort(v1.begin(),v1.end());   : I5 p9 F' r. L4 J6 \8 z; v
        sort(v2.begin(),v2.end());   
' F5 s5 d0 U$ T% \; _( T7 `1 ?        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
0 F) M( b* _# {        return v;
1 x$ |& q. C1 A/ i( I$ u}/ g0 M7 E& W+ V; f
* \+ W: i: T* I
//两个vector求并集7 q( t* a" @# ~1 _6 c
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){: j( P" m& W0 q+ H9 G. }
        vector<int> v;" L# ?( v( G- T  |- k
        sort(v1.begin(),v1.end());   4 M' y. y1 h6 p
        sort(v2.begin(),v2.end());   
! u& c, G* R6 t+ g, P+ k0 L8 B6 t        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 {3 Y( F) J" i! V  ^: X: J# L        return v;$ y" @9 g, g) a4 M$ m5 B" I
}- f) S1 b" j! R6 A, u* K$ K4 b9 Y
0 I! B+ i- t0 g2 }  M
//判断vector的某一元素是否存在
4 y4 m. r  o8 }3 a$ v5 `bool is_element_in_vector(vector<int> v,int element){
- e" P/ C. q* t+ F( `; q" b8 O        vector<int>::iterator it;/ O# d! _, P  `( T6 m9 T4 S/ ]
        it=find(v.begin(),v.end(),element);
4 w  s6 n' C; x        if (it!=v.end()){6 t) s) I+ R! x: _$ f
                return true;
+ V4 o, @! W. v5 p        }
! r/ Z4 I$ q$ N7 |, w        else{+ c0 _5 X# ~0 B8 l$ n0 Q/ g; R
                return false;) a' x# n, z6 {! s  D
        }
* O  o9 h) F  z' s0 w2 U9 u}
" \+ Q8 _8 R* B! |$ U1 g0 F) E
. w) E' O0 a& S1 H. T) lint main(){
# Q- o( q% }/ g5 S9 \! |: O8 [! h        vector<int> v1,v2,v;/ Y* o0 D/ S/ A% W0 O$ S
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
' x  e3 N0 S0 n$ R        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
9 @" j8 }- F( m9 x7 M5 a        cout<<"对v1去重:";4 z3 }6 ^/ u! U& {9 B
        v1=unique_element_in_vector(v1);
2 S% t0 [2 e7 [        print_vector(v1);! l+ b1 m- }$ l! f# i: H9 ]
        cout<<endl;
: q% j! X# {/ S% L        cout<<"求v1与v2的交集:";
. N3 A" ]; |6 r! o  \        v=vectors_intersection(v1,v2);1 {7 R: |9 o1 R9 t6 [# ]: C9 O
        print_vector(v);! V& f9 }% w2 Q3 G! f; G
        cout<<endl;
9 I/ q* i9 G! G$ e3 r        cout<<"求v1与v2的并集:";2 M1 J( B# }# @
        v=vectors_set_union(v1,v2);$ F, m8 T! R& `( j
        print_vector(v);
5 ]4 V, i1 [- l) e& \" T9 o+ g/ x        return 0;
& D' O, q9 d+ V1 y% B  @7 M6 r}[/mw_shl_code]
! T0 \$ R: ^% A% E) W3 f- r
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了