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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
0 M) W7 \% _; c9 e2 a

+ J8 J; Q( b8 W- y/ d$ k: wC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
0 ^, r4 Q! y; V! z[mw_shl_code=cpp,true]#include "iostream"
  O, O% B& e/ o+ N# x#include "vector" , f/ }5 K8 g  a: i% S0 }
#include "algorithm" //sort函数、交并补函数
  S) S7 e" Q. U! l  n7 x# Y2 i7 e% [#include "iterator" //求交并补使用到的迭代器
# x' g5 L% x! Nusing namespace std;
4 S# E; w% R+ n( M: l
8 I! f' n/ }* A) s  \7 e//打印容器vector. q5 V; C" G$ F# ]! V! r$ s
void print_vector(vector<int> v){
1 X9 W1 e! H7 J4 \$ t        if(v.size()>0){, I3 ]- i+ ]' Y: ^, Y2 ~
                cout<<"{";  
. {: l) f7 M6 u2 A                for(int i=0;i<int(v.size());i++){  
3 i( W4 A- ~0 M! |5 p                        cout<<v<<",";  
* Y6 q/ V3 z- \" h' E: ]                }  
* V; ~0 }" z0 v/ N+ Y6 a5 Y) V                cout<<"\b}";  
3 n! O  b4 K5 n) f: v) i/ ^        }- S  n4 X) w- H- R) ^4 v
        else{
+ j; u0 @) F2 p; |7 x. s' b                cout<<"{}";
$ P7 ~/ _$ y0 A        }
0 z$ P' i( e. E* z}7 W9 U3 r7 @- B0 V+ K: }# }
. D2 @% e+ U2 J( L5 `% b
//容器vector中元素的去重
2 L2 B& B' o( N7 [5 C1 ?2 o8 Nvector<int> unique_element_in_vector(vector<int> v){" w1 I+ ^% }: o  ]' c4 b3 ?
        vector<int>::iterator vector_iterator;2 r( m; a! n! R- V. L
        sort(v.begin(),v.end());! ^7 Y0 F3 @9 l& n
        vector_iterator = unique(v.begin(),v.end());
# Q; b1 q& o- f) H0 G2 e3 i! C        if(vector_iterator != v.end()){9 d* [! J4 z8 ^& G; W" f: ?) }
                v.erase(vector_iterator,v.end());1 t  d: K6 R. G* e" I1 Z
        }
! `7 Z& b; U/ j        return v;) ]  x$ V# O9 k+ U
}& l" g; T- Z, N" Q6 F% B" m( Y/ ~8 F
. ^7 n6 p" C- [: n0 G1 K8 {
//两个vector求交集
. a) m+ ^8 n* d  }, |vector<int> vectors_intersection(vector<int> v1,vector<int> v2){9 |) S6 m& w4 Q6 g% K! x
        vector<int> v;
, N6 Y; r- C# x  B( e* {        sort(v1.begin(),v1.end());   
+ e# d% Y2 w. B. b! o, }! F. a        sort(v2.begin(),v2.end());   
8 K3 T' e. F$ H; w" k! E  r: F        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
0 o( ]! }9 O9 ^# w        return v;5 W. D  s% c% r  n5 C
}% {" b. z( c4 \( R
- ?! ^+ s% U( O8 l
//两个vector求并集
7 [6 L( |1 K6 U$ t2 Tvector<int> vectors_set_union(vector<int> v1,vector<int> v2){' H! c9 p( H/ z/ A: K
        vector<int> v;( T) ]% S) _5 g* i
        sort(v1.begin(),v1.end());   
3 o) q; `; k0 R7 L$ C        sort(v2.begin(),v2.end());   
9 ~- a& V4 {( a: F* B( m  P& M        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ d. `5 e( q, C2 h. l' ~
        return v;6 U8 m, V; T$ ?, B0 r
}
& O9 F$ Z, a& `1 T3 r2 h! i# ?" B. a $ ~& ?# d. `( e$ r
//判断vector的某一元素是否存在
0 A' v, ^7 @8 E$ l  C% ]bool is_element_in_vector(vector<int> v,int element){
, u; S+ f( O5 n$ `" f  p8 B        vector<int>::iterator it;7 q! t- O8 _- p) ?5 W! Q9 _4 q
        it=find(v.begin(),v.end(),element);: [/ e% a* k) j) o  k& P) H, i( {
        if (it!=v.end()){' F9 ^9 M' }% K2 k; _
                return true;
6 d, o- R; H' o, g$ p        }
3 ^# {, ]) K* \/ d        else{
+ `- b& R2 V6 U. R                return false;! r: v( P, z% A$ L
        }0 u4 f# y" M' _  z
}
+ ^: U$ ?- V* s; s9 l4 s $ _8 ^3 w( e& c' @
int main(){& t* L0 B# d2 q* W7 Q9 }
        vector<int> v1,v2,v;
# z. X. N; n+ u9 o! k& d        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
) t  a8 l* U% K* b+ ]  Z        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;+ }; E, r) i8 R) R$ N7 U8 l! C
        cout<<"对v1去重:";
& `2 U3 }6 V0 |- _3 k% L3 Y5 r' S0 E        v1=unique_element_in_vector(v1);
0 @6 @! H, B: ]: {6 ^        print_vector(v1);
# Q( e+ q* l0 r9 @0 S        cout<<endl;
4 s5 M6 u% C- R- K4 w" D        cout<<"求v1与v2的交集:";
& j) o" z* T) w- S" d- X, c        v=vectors_intersection(v1,v2);
6 B/ c* k9 V7 j9 `        print_vector(v);
8 t$ \- w9 ^7 M5 Z5 j( p9 U        cout<<endl;, T3 b. {/ ~7 q
        cout<<"求v1与v2的并集:";
& l" S, w' s) E' O; A* {        v=vectors_set_union(v1,v2);
) n. b% r+ O: E7 k2 ~/ S/ ^        print_vector(v);+ @0 B$ E$ \7 I3 h* Z: j, S  W' C+ n; Y
        return 0;
: `  E! d0 u$ Q, m! f}[/mw_shl_code]
( s" g0 T+ a4 G: o: B' e
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了