PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82170
QQ
发表于 2018-7-2 19:41:23 | 显示全部楼层 |阅读模式

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

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

x

% L8 `' ]; r2 U% h1 L' A
- B6 K# U" ?5 y6 N4 b4 \1 J. cC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
- k4 }' z6 W: b9 |( v" ?[mw_shl_code=cpp,true]#include "iostream"! T( K, |5 F' f# A: b3 ^( i
#include "vector"
' t4 F+ d1 z' u5 K#include "algorithm" //sort函数、交并补函数+ D2 O0 z  X8 ^3 M" r8 T5 s
#include "iterator" //求交并补使用到的迭代器
, c( M, G* Q$ Y0 X2 g# g5 gusing namespace std;3 C* `$ o$ N5 U! X; {

9 @/ N4 s1 b6 U/ ]+ t- _2 l* k; t//打印容器vector) K6 C9 m7 Y1 \& I" _0 r
void print_vector(vector<int> v){/ D% d' |4 O' l- [6 H% Z( u+ Q0 G
        if(v.size()>0){
  V4 O$ x% }$ i) U' B                cout<<"{";  
& ~: ~% C3 {# }& W0 {2 }                for(int i=0;i<int(v.size());i++){  
$ P+ @0 N5 r0 P2 L# N& X4 }5 L                        cout<<v<<",";  
0 U4 }4 u# `7 S5 x* U  y! |0 K7 l                }  
5 f' _, P! c. A3 d4 ]# r                cout<<"\b}";  $ ~  M! y  _' u% H# t  B
        }
, w8 w, t. O( m6 d        else{% N- k9 Z: w) D* y3 C, e9 M# W
                cout<<"{}";
% W, i) `7 d3 d        }, A8 R* W+ |0 l% {8 R# ]7 c
}6 {! d/ e' O+ E, |6 t$ w
3 ^. ?7 u' r- w1 O$ V
//容器vector中元素的去重
( F7 T# b1 |# E6 g. I% Qvector<int> unique_element_in_vector(vector<int> v){4 ^/ L8 B3 Y8 z, ~% h  s: o* L
        vector<int>::iterator vector_iterator;
0 ]7 m. j; W% j, d        sort(v.begin(),v.end());
$ d: _. o, [0 R% X2 D, m$ z; I        vector_iterator = unique(v.begin(),v.end());' p: h+ M- R9 F# Q
        if(vector_iterator != v.end()){/ _& W; E8 `# g8 c8 c2 H) G
                v.erase(vector_iterator,v.end());$ A0 W+ t4 f: c1 f4 ^
        }5 q. q4 i% |& \. F$ {$ J
        return v;" r3 `  y; K. T, r
}0 i8 p! I- q+ a1 U" ?( l
6 `# ?( y! I& i8 \" S9 c
//两个vector求交集; I3 }3 |! P! F( t0 P) Q
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
7 l# u" x( B( `* u0 {. t8 P' E        vector<int> v;
' g* [) W8 V& J0 L9 s        sort(v1.begin(),v1.end());   : p2 G) ?2 ~+ d- N/ C( h/ v; f
        sort(v2.begin(),v2.end());   
7 r1 X9 r' t4 Y! n8 ]! Q6 |        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 " f6 Q$ |+ v9 h3 B- V; H
        return v;
) r* q$ J. }* F3 [6 t}
/ K, {/ c8 w4 [: P2 c # P) R( ~; x- |5 Q* b* n' |
//两个vector求并集: Q; a/ @9 G5 ?& l' K  a
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
3 Q9 d0 o7 f; x& n( m2 c        vector<int> v;
! u. t$ u1 ?7 K3 x: [        sort(v1.begin(),v1.end());   # U$ M" Q+ W  W( K4 Y9 ]' H
        sort(v2.begin(),v2.end());   ; T; j, w2 q3 M" h2 M" Z7 j- _- o
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 5 @' ?0 y( l1 n0 ?/ o5 Y
        return v;' H, f5 g8 T5 A$ Q! Q& T
}2 l2 m/ o7 ~" l3 f7 b! e3 r& d

( x7 _* Q0 ^. I9 v" H6 F//判断vector的某一元素是否存在
' r5 J* r: P( Ubool is_element_in_vector(vector<int> v,int element){
5 D2 ^5 f8 C8 z1 }: E% ?0 c        vector<int>::iterator it;
( b/ s/ ~# J2 t7 P        it=find(v.begin(),v.end(),element);2 q/ l8 f$ b! r6 D; b$ ^, H
        if (it!=v.end()){: m% x# i, x$ ]
                return true;5 N& P9 Y% K" e! c, U5 W
        }! R4 v  H8 @2 l! @. Y. P5 {+ n
        else{
. G/ n- v' y1 S  \* x- F4 m6 X                return false;
* P7 a+ D# M+ Z+ a0 A/ K7 ~5 b' A        }
, z( Q( x# }5 S' d6 B8 j}
) W3 R( e! b% N& p
! N# O0 Z# I4 B  Oint main(){- R2 b4 \: E3 O! T4 e5 \2 j
        vector<int> v1,v2,v;+ \" N9 V, [, V" W: Y( x3 L
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);4 ?# e; N8 f) u8 N  I2 ?* ^$ A
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;6 K/ F# {# B' L
        cout<<"对v1去重:";7 a9 F) B& t1 {; _
        v1=unique_element_in_vector(v1);
0 b/ r( h9 I/ f5 m% F        print_vector(v1);
- \* H2 C3 I! p  M5 g        cout<<endl;. H( I" m( Q9 P: e
        cout<<"求v1与v2的交集:";
% G+ S* p- C3 l# {7 G        v=vectors_intersection(v1,v2);. S; P! l1 j, s( T( U: L
        print_vector(v);0 n% _% h, a  `3 e6 i6 ~% i/ f
        cout<<endl;
+ k% Z; k  f! E) p/ T  r        cout<<"求v1与v2的并集:";5 d* n+ n5 j' [" f  j
        v=vectors_set_union(v1,v2);( [8 m, l# y( F: T5 J9 B
        print_vector(v);
, j: n0 }5 V$ h5 h        return 0;
) Z- t1 m# R9 D" N* v8 L; D! v}[/mw_shl_code]
; |- s: s/ v2 l$ y" w, z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了