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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

; b, ~- U: @, I( `/ X. W
* n  s, W/ C, M+ ^* QC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
- ?0 U* @6 h4 }$ ]% f[mw_shl_code=cpp,true]#include "iostream"
! [% j4 Q- |- [# V$ I#include "vector" % [: V) l) T. B, D! g( b7 N
#include "algorithm" //sort函数、交并补函数
6 M8 X* o) R( l8 G#include "iterator" //求交并补使用到的迭代器- u, {& N, w  u0 n2 Q
using namespace std;, x, r" Z3 E% [5 t% [
" e# u" G0 F" M) b; G$ d
//打印容器vector+ E% X9 z3 u# l6 D" I8 K
void print_vector(vector<int> v){
# H6 J5 l8 i% Q        if(v.size()>0){" ^2 R/ {/ p3 H2 s
                cout<<"{";  
" k' C6 Q; d2 b5 M; ?- S+ P5 J                for(int i=0;i<int(v.size());i++){  
- v+ r3 {' y& j2 _1 Z                        cout<<v<<",";  
8 u& N  u' Y: ~. Q; c                }  1 L8 ^7 ^+ R+ L* M. f
                cout<<"\b}";  ! A) V& |: o$ a! c5 B
        }
8 \- g. y; T: X        else{1 J6 _7 m7 ?6 ^+ G+ @2 G% v2 m
                cout<<"{}";0 u! h  h7 G6 W8 y; W
        }
; ~0 U  K" [* s: _) c) f}  _! ~$ ~; p: l+ j8 m4 `( Z5 [0 i

2 f2 Z3 z* A; _* I4 D! ~//容器vector中元素的去重$ Y5 u- d# P6 o- U: O' C
vector<int> unique_element_in_vector(vector<int> v){
6 x& ^/ O4 r& B7 f, D3 R9 G1 I9 a        vector<int>::iterator vector_iterator;: K* k  o* p* M4 C! V
        sort(v.begin(),v.end());
/ u9 q( a9 _( h3 ^/ `0 ?2 j5 N& y$ Q        vector_iterator = unique(v.begin(),v.end());  I7 ?5 S( T4 q# B
        if(vector_iterator != v.end()){
9 C8 q' R, t3 ]4 Y* B8 d0 L                v.erase(vector_iterator,v.end());
% `: q7 c1 l* N3 o        }, O. h  }# @4 X5 e  f1 ?
        return v;9 K6 ~# c7 ]+ [. z2 ?
}
1 j+ a: _( N- |# s, H- l 0 Q4 ?8 a& }, P+ ?/ ~5 z, }; ^
//两个vector求交集
! k  \( {8 d' q2 r1 ^vector<int> vectors_intersection(vector<int> v1,vector<int> v2){1 J6 I( E0 e8 \5 g- [9 f
        vector<int> v;
. ^' G& P& ]/ o        sort(v1.begin(),v1.end());   
" w, L0 ?" {& M$ O        sort(v2.begin(),v2.end());   
* {/ w; C5 W/ s$ q$ d* `        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
" @) X; |5 {1 G: Z        return v;3 f" @  C8 h% J
}7 Q9 d: B/ D% U8 K  j  }% e

6 ^( k/ }+ ?  I* p2 A$ e# |//两个vector求并集
& R/ O1 [' t4 \& F! d% w) W& gvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# V& x5 N" n5 B# _& x* u        vector<int> v;- J6 u! w# }* w
        sort(v1.begin(),v1.end());   3 F, j& h- Y7 O* S" h# H& X: m; u
        sort(v2.begin(),v2.end());   - g2 J" I' z2 W( |
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 8 u# F5 o+ T1 _* X6 j8 f9 K
        return v;
2 ^/ s* e) a# u}& ~  w) X8 n: l1 R, V

+ m& {, y. L& F7 o( c) e//判断vector的某一元素是否存在
" W7 X& H  ^8 H  J1 zbool is_element_in_vector(vector<int> v,int element){# e. X% o4 |+ U0 M; y
        vector<int>::iterator it;
1 p3 t+ m6 G  K$ P        it=find(v.begin(),v.end(),element);
% u9 n! s7 T+ K) E5 ?        if (it!=v.end()){; m. N7 B% ^. [3 b& l
                return true;# k7 Z, S1 m. ]' W5 U+ x  O
        }
9 u/ l* N/ u, W5 N2 Q        else{
0 M5 X2 f. F% ~0 P$ Y: V4 b  l; l( a                return false;: t4 v. \# \3 n
        }
- Y7 x% Z; J  I0 k$ O; \0 o/ u}
, E$ e+ L( C% v' F, V0 n0 |
: w* }, |2 O! B! Xint main(){
& I' d& A5 L, j        vector<int> v1,v2,v;) g# i0 R6 ~) b; p) m
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);! Y4 f: ^. N1 B* e  ~1 ?
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
) }6 T6 ]6 I/ k; V1 i        cout<<"对v1去重:";" x% h* ^" F$ D$ h. Y0 @$ c
        v1=unique_element_in_vector(v1);
7 x: e3 a4 e) o$ v0 q% k( d        print_vector(v1);
* f* d# z- V9 n& y" P) o/ S5 U% p5 `        cout<<endl;' `% ]0 ~' q5 s- L& F% k# D
        cout<<"求v1与v2的交集:";) e& N' f& ~$ m7 J. Q" U4 B) [/ T
        v=vectors_intersection(v1,v2);
5 Z' v* K" }# k5 p+ R/ Y        print_vector(v);
3 `+ ~5 H! X4 d% e        cout<<endl;
4 ?8 G+ n/ `* I: Q* m% l. x        cout<<"求v1与v2的并集:";: H8 s! E$ o( w) I! ?; L
        v=vectors_set_union(v1,v2);# ]& R' b# J; f4 s+ R; D% P. n7 |: }+ C
        print_vector(v);/ R( |- \, N" M( v! u8 d& h/ _
        return 0;) c8 S2 C% v5 l7 h
}[/mw_shl_code]0 K/ j3 F" W' P5 Y1 @9 Q6 D
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了