PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

) R( L7 d4 _8 s' n( \) c' m9 q7 m9 x3 Y* l' E+ K$ T0 f- w
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
+ f$ t8 `* I( c0 M0 i9 [[mw_shl_code=cpp,true]#include "iostream"
/ h/ R# T5 v$ y7 V0 Q#include "vector" 3 D/ R4 ~: \& n  K  q7 M5 ]
#include "algorithm" //sort函数、交并补函数. k# Q. j9 D9 B8 {6 a$ X: `
#include "iterator" //求交并补使用到的迭代器  T; t% O9 S" Z5 q
using namespace std;
+ Z1 i5 P$ t- K) v
( w! x" T* A9 |1 B+ |: S//打印容器vector& C8 G/ u3 r! d1 R8 u1 X
void print_vector(vector<int> v){! ]3 d# _% p+ U" m2 \
        if(v.size()>0){
& O3 U& l3 O% L8 q                cout<<"{";  - M8 y( y& l' x
                for(int i=0;i<int(v.size());i++){  
2 N% E6 ^+ B- v+ Y' t/ G                        cout<<v<<",";  ; z4 g) O0 ^+ {1 j7 e% v
                }  . w8 z9 ^0 p; r4 ?& ]+ k
                cout<<"\b}";  
% C) ^5 ]  @6 S/ [' x        }
: ?& e/ D: t- ?2 `) V" U        else{
. R- L% I) R# @                cout<<"{}";6 @2 N5 s+ H- ^
        }
1 F6 F1 I1 O$ n6 F$ M: V}- x- ?1 X; U* x8 d
( n( n& }! `4 g( S) G$ a% J/ d
//容器vector中元素的去重8 `4 o, m; k* k- K5 T. b% X" i
vector<int> unique_element_in_vector(vector<int> v){; K4 l: Y0 _# H9 A/ ~
        vector<int>::iterator vector_iterator;
8 z9 @, Y. ?! O2 A        sort(v.begin(),v.end());& I$ D+ [4 d8 R4 V* t1 R
        vector_iterator = unique(v.begin(),v.end());
7 W2 o6 A3 m* ?, c$ m        if(vector_iterator != v.end()){
2 r& {7 a$ P+ ?# @) l& z7 W                v.erase(vector_iterator,v.end());; [- x. \5 ]6 G5 `& t
        }
3 H" S5 r5 r1 J2 r        return v;4 n: T% V& q2 [3 K5 S. q
}
: @9 b  ~6 }  d6 \ 5 v, G, }6 b- g; Q1 r0 ~% M
//两个vector求交集
" q* s: L  k7 v% }( x  v/ J" F! Z8 Vvector<int> vectors_intersection(vector<int> v1,vector<int> v2){& q' \6 P9 F+ `( k: Z
        vector<int> v;
# i, F! [  {; R9 f9 q2 L' t) b        sort(v1.begin(),v1.end());   
" x4 Q7 k( K2 i$ I& g) Q        sort(v2.begin(),v2.end());   1 W. E: X" ~  G! U8 @
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- W; C* k( J8 n/ x        return v;: ^/ N. Q1 B9 a' }/ ^. u
}
; s" O+ m' d9 F8 |; v* [; {; ~0 h- a - ~  O4 C+ S- d* q( S7 Y
//两个vector求并集
; l7 C. r7 R+ E6 n" H! yvector<int> vectors_set_union(vector<int> v1,vector<int> v2){4 T2 f6 m$ R) O* Z
        vector<int> v;
8 b; T- j& I9 l( w' ~        sort(v1.begin(),v1.end());   
8 n( ]1 D0 k# u        sort(v2.begin(),v2.end());   
+ d4 m7 t, R5 Q7 o$ T        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
3 d: }+ r. b9 z* i5 k/ N        return v;
' W1 {, ?( `( j- l. V}- H% i3 O/ L9 H. ]& w$ Y' @% _$ l
% \5 \$ z; j2 m( u- A
//判断vector的某一元素是否存在2 C$ J" Y7 Y4 R
bool is_element_in_vector(vector<int> v,int element){7 I! Z& e" k  w) a6 ^
        vector<int>::iterator it;5 y- C- L9 S$ u2 z3 N
        it=find(v.begin(),v.end(),element);
7 Z; e2 B3 R4 u9 @, p+ H        if (it!=v.end()){% @/ v# `4 x1 t  a+ \  R
                return true;0 a, H: a: p5 c  \
        }
6 B1 L9 V4 f. W' {9 R        else{" T& z& _) x  o7 B
                return false;5 P* S! t. ]; D! e6 d! e( w
        }
* O5 t7 f2 q. k# K1 ?1 d7 h}
( z( v& {9 a: L2 j9 X/ W* b % q  j  K0 v% m2 \$ s7 U
int main(){1 u9 J3 K" @# d8 f0 p3 \
        vector<int> v1,v2,v;
# n/ w8 Z! D) V* F; f* y% J        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
% G/ a1 p& v' q/ v2 J        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
4 H4 k3 C, w  |        cout<<"对v1去重:";
6 X  v3 J7 k  P) ?        v1=unique_element_in_vector(v1);
4 T! p: ^1 t, Q& K        print_vector(v1);- W0 c( |* m' `& A- x
        cout<<endl;# z1 D# P* X% S2 y0 i8 K  c0 u
        cout<<"求v1与v2的交集:";) I( P2 L* M( D' h& i
        v=vectors_intersection(v1,v2);# L7 s8 i; @, p/ a- i2 o
        print_vector(v);) Q$ @% c0 s3 P3 N  j
        cout<<endl;
/ [. d: j* t+ V6 z) C! m) G. \# x        cout<<"求v1与v2的并集:";1 a7 v. g& ?$ P6 ^
        v=vectors_set_union(v1,v2);" P8 \2 Y% @  ?5 g0 ^) J
        print_vector(v);
: I6 S) A+ u; U1 W! n0 k) ^  \        return 0;
- {3 i3 j. Y' x}[/mw_shl_code]
8 F1 K4 ^0 @8 }
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了