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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
. a, c3 ]; F0 x- S  `) [; v* [$ v( T
& v& `8 f+ n4 o5 F
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
7 s& ^4 d: t! ]  o2 w[mw_shl_code=cpp,true]#include "iostream"+ B5 p$ |+ H$ V4 W8 `. H
#include "vector"
! |) h0 t) P3 g$ ]' s1 P9 r* @#include "algorithm" //sort函数、交并补函数
. O; n, y% \* E# g" ^#include "iterator" //求交并补使用到的迭代器
% e+ F/ w+ T( u/ n7 Z# |using namespace std;4 H- n; u+ j# y, [1 c
/ U$ {% }+ J$ F- z/ S$ D* E
//打印容器vector
+ K- H: X* n& dvoid print_vector(vector<int> v){4 w8 M  F$ g/ S1 D
        if(v.size()>0){4 k0 N6 d/ r4 A; {8 k/ B' e9 S
                cout<<"{";  
6 v/ `! a* R- c9 H# T/ l                for(int i=0;i<int(v.size());i++){  
9 A% {. ~. ?) l6 J" _& H% W                        cout<<v<<",";  
6 R( u7 D6 }. e1 U% x                }  
- _1 h& r/ q: _/ ^, L0 F* o; _                cout<<"\b}";  8 C8 W& Y+ x- i. D& U0 d; s
        }
1 K- W6 Q- K" W7 w* G5 p  i1 B: |        else{' i2 P# `2 A9 U2 y6 Y
                cout<<"{}";+ E3 N+ r0 V8 @  |
        }7 M" E$ i4 S4 Q* `- N* v
}! {+ r$ l0 o7 H: \
5 P* r* M: d1 h5 c; k
//容器vector中元素的去重
. `: S8 c0 o: a1 _0 `. Zvector<int> unique_element_in_vector(vector<int> v){
% `4 a7 v% b( x1 \        vector<int>::iterator vector_iterator;1 A! Y7 e: g& ]0 c+ q8 a
        sort(v.begin(),v.end());
% L* W; d9 C# R: m$ T        vector_iterator = unique(v.begin(),v.end());
9 p- C! Q6 ?  K( w  T/ C        if(vector_iterator != v.end()){
% n  n) i  e: }                v.erase(vector_iterator,v.end());
$ }3 G: z& }. X% s: V        }! q7 {2 q0 Z1 W2 p  O
        return v;
# p6 P+ x9 C3 g/ P6 ~1 Q2 u8 I}! `) _. _) C. G( |' z" J  o
2 n/ Z; ?/ @1 k3 T
//两个vector求交集
; g. H  j, y6 p1 P1 ivector<int> vectors_intersection(vector<int> v1,vector<int> v2){
! \1 }! z- p' U( e# r1 g        vector<int> v;
( _3 f# z  d! N1 l4 N  e9 p- f        sort(v1.begin(),v1.end());   
# F+ S( a: B5 x; T+ a, E) I        sort(v2.begin(),v2.end());   
3 _5 ?( u, S: [. Y) L        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
4 E" c5 E! f' C" }. y        return v;
7 q% E" p# c6 i6 F5 q}% M: H0 _. Y3 {

- f, _) I! K% O0 a! U% B//两个vector求并集
$ P  W2 x# v) H; y* [vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
- V4 t9 |: T6 E8 j4 n        vector<int> v;* |2 k- w/ Q  W( e! r) e
        sort(v1.begin(),v1.end());   
' O9 F1 f0 M8 j3 R+ n8 s' M& M        sort(v2.begin(),v2.end());   
4 I0 L3 F, e# [8 ^, K/ C" }        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 _3 J9 y7 b% _- H, a6 N( u8 i7 j4 P4 }
        return v;
. M: T! M0 Z* g: x0 I* V}8 q8 ~2 K, ^9 P9 W

. K$ O0 [3 z- }- |: M7 I3 O//判断vector的某一元素是否存在
. A5 C% b$ T' R  Ybool is_element_in_vector(vector<int> v,int element){
2 F8 w" n- b2 J7 y        vector<int>::iterator it;
7 {: w6 R7 U9 Z/ w( B        it=find(v.begin(),v.end(),element);
) ?( J6 N" T, C3 r$ C        if (it!=v.end()){
1 e) ]3 L& l) P. a                return true;
; J$ u; p& o, t# G1 ?        }1 y  C7 p1 _& O# v2 S
        else{
, G; T; O8 I+ g4 R7 n- T* T                return false;
/ x$ g& g, e) g  r3 l: a        }' I% X- `6 O* d) x
}
  @( Z* L( F" ^. Z" q" M
( q0 k7 c) D% u, Nint main(){- b( o0 D' o3 ~9 y! K% B
        vector<int> v1,v2,v;
& `' s" g+ o* V- p* W        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);" ~: {' \; B- M' \
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
2 Z+ l# J* H/ I; ]9 s7 ]7 ?& m        cout<<"对v1去重:";
$ @" c3 R3 U  P$ Q# [, P& a; ?        v1=unique_element_in_vector(v1);- {7 A" u7 v6 P+ Z) S% l0 j; d
        print_vector(v1);5 x7 F4 f% X, G1 h6 f
        cout<<endl;
/ o; _7 r. {7 K5 M3 @& O; V% u        cout<<"求v1与v2的交集:";; v* g; d, A$ l$ s5 q
        v=vectors_intersection(v1,v2);
4 I$ m9 U* {  d8 }$ q! _        print_vector(v);& u- \1 o" h, _2 @
        cout<<endl;
* W, [. m: i6 W8 h7 p+ `        cout<<"求v1与v2的并集:";
8 ~; X- Y( C; Y. z+ U% Z' M/ f        v=vectors_set_union(v1,v2);
" h% G4 C% z- s# X0 M: }        print_vector(v);6 {( ], C2 Y+ k  M. T& Z/ v& A
        return 0;4 M6 h8 `3 z: ~2 e5 f* R- V
}[/mw_shl_code]
. S! O; ~0 J8 m2 S6 F
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了