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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

/ c0 O/ t. i- G2 j% m% D) }
( \+ V; P$ l- e3 Q) UC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:" r( a4 K1 X5 S8 G4 m3 t  @  G
[mw_shl_code=cpp,true]#include "iostream"4 _: T% n. ?7 Q3 J' `8 U# z
#include "vector" 5 G# S: j+ q+ s4 y/ F+ z
#include "algorithm" //sort函数、交并补函数% N6 o. Z$ `- I8 y8 e
#include "iterator" //求交并补使用到的迭代器
* F+ Z6 j' m  @* eusing namespace std;
+ l% C' [( q) H( O& }! j
: `( T$ `+ e: E0 G//打印容器vector. }9 ~4 y' B* M  J
void print_vector(vector<int> v){. P2 N8 ?2 p; b/ }' [' `0 ^! w
        if(v.size()>0){
) I6 B3 g; v) |0 e+ y                cout<<"{";  0 Q5 K: q) m; N+ t! s7 a! w
                for(int i=0;i<int(v.size());i++){  # ~% U* m# ^1 B. M5 W
                        cout<<v<<",";  
1 C9 h( o. h6 q. n' {4 Q  l* y* X7 }. |                }  5 g( i. m8 i6 B! S
                cout<<"\b}";  
, l7 n: v3 m7 l3 b, e9 w( D        }+ @  x( Q) ?/ z; x
        else{+ |" k' E: S2 {1 a
                cout<<"{}";! z) Y% d# M1 ^: ^& q. N
        }
% @2 I* v9 g. B% z}
" `6 C5 l. _) p0 ^/ _9 \/ k
' I& R9 }0 z+ ]2 f; H& O3 F% ]//容器vector中元素的去重
. y; w; o8 x9 Q( e$ J6 ^0 D- T: Fvector<int> unique_element_in_vector(vector<int> v){
5 D) ]/ H2 ]3 i        vector<int>::iterator vector_iterator;
3 R& V0 r7 _) `: Q# n        sort(v.begin(),v.end());
8 |+ h2 L- r) w4 F$ j- r        vector_iterator = unique(v.begin(),v.end());" C# L5 ?8 y! a- p6 P- l) ]1 X2 w/ `
        if(vector_iterator != v.end()){
* n! |5 Q" Q7 G0 U4 H9 h# Y                v.erase(vector_iterator,v.end());
: i' ?3 i$ O1 p        }
, ]$ h# o$ q- Z6 q3 g  Z. I; d        return v;9 ?! Y  x3 ?: R# I: ?5 p0 K1 v" B
}( j+ Q( q3 S: W
# S6 W" L! J- C: @: `
//两个vector求交集5 U! }  }1 @( P
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
! @- g! m5 Y: R0 u  x% T* a: j        vector<int> v;
, c1 A4 @: I/ D1 `6 b        sort(v1.begin(),v1.end());   
- P" z4 f" S6 p& ], K        sort(v2.begin(),v2.end());   
& S* u, X3 k) b        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
4 ?6 V7 m9 `6 L/ R9 H        return v;
) D$ ]0 d5 K; M2 \& P}
) B& z! w' T2 ]$ l6 p
# G( D" X) f: s* m4 ?! z$ |//两个vector求并集
4 t$ @; c/ m$ D3 wvector<int> vectors_set_union(vector<int> v1,vector<int> v2){+ O& b( }7 |) x3 W( l* U$ t8 b
        vector<int> v;
: `' |3 P7 ?* i9 W3 N0 t# s        sort(v1.begin(),v1.end());   
, k6 V8 s: `- K6 N        sort(v2.begin(),v2.end());   ) o- A, w' Z6 s6 m# A0 K% O3 `
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 # s- B" P5 |. k1 a4 {
        return v;
& t5 g) N2 Z8 P1 [}
& i% S- \' z  L  ?
" G- S$ C. z; H: S6 b! z8 D) O//判断vector的某一元素是否存在
3 a* U) T2 F9 e# l) obool is_element_in_vector(vector<int> v,int element){
2 T% e3 Y! N9 b5 l, s/ c        vector<int>::iterator it;
8 ^6 O$ E5 T- R% J) L        it=find(v.begin(),v.end(),element);
+ C( J9 X  z5 ?+ b        if (it!=v.end()){" k& `( }$ _0 Q! e* b8 }
                return true;
8 T1 [0 \' I8 C7 h. m! P        }9 J# N) ?4 L+ y# c. I" i1 p
        else{& c, C  X( \. l% @
                return false;
# ~, O5 }8 n% ]; k, H        }- L& Z3 k5 D2 K) S$ `& e" |: d8 a
}; O5 b; ^& t- u! }9 p# M, M

$ t2 b/ M7 q# s' o3 {int main(){. g9 ^* N, b7 L; a: F# ^! Y
        vector<int> v1,v2,v;5 R, I* y* u0 J2 o) \2 C; i
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
- s7 |" |/ z, h' n, |9 U# H! D* p        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;+ W6 G4 U0 n  G0 ~, u) R2 A. K
        cout<<"对v1去重:";; S' c# ^& P6 p# j: v4 ~8 l/ J% o
        v1=unique_element_in_vector(v1);! ]$ _/ j5 N+ o& E, q
        print_vector(v1);
) q1 P# P- z' Y. P6 \4 R  v: \        cout<<endl;2 @2 m2 U+ i+ c- ?
        cout<<"求v1与v2的交集:";1 x' X. B* n+ ?/ R. e
        v=vectors_intersection(v1,v2);9 `' D8 }/ u- {/ B) b0 F0 }, [
        print_vector(v);
8 A0 P  Y2 b, a! z        cout<<endl;- A4 i1 `% ?4 D) q/ P) ]5 M% e9 _5 d2 ^
        cout<<"求v1与v2的并集:";% z; e3 `* M9 J/ Q9 L- r
        v=vectors_set_union(v1,v2);/ V+ H2 `! x* D  `
        print_vector(v);5 }8 F7 I9 D/ Q- Z( J0 j4 _2 S
        return 0;) h/ d9 P: B/ o6 Q- c7 h' f9 b
}[/mw_shl_code]) P0 `/ O, M+ t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了