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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

9 j" _# v& |2 J1 f+ w  Z  g- R1 s4 A' {% V
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
2 q5 p/ J# v" S' ^. y[mw_shl_code=cpp,true]#include "iostream"% S4 v7 S- g9 Y- d. p7 Y
#include "vector"
2 _1 @$ d( L2 ]& ]' r#include "algorithm" //sort函数、交并补函数3 l; c7 y' n, O4 G' V& E9 ?' L
#include "iterator" //求交并补使用到的迭代器
; e4 {5 c5 {2 V* Nusing namespace std;
0 o, k; Y2 ^# _ ' j8 n& c4 A2 M- [! r7 p: S
//打印容器vector
! z. B( B/ j7 L9 ]2 A; s! D9 dvoid print_vector(vector<int> v){
, B0 Y1 h8 V* A, `2 Y        if(v.size()>0){
. r: m8 H1 s8 s; S8 q                cout<<"{";  / Y" r1 |0 s& @" q5 N$ [! B
                for(int i=0;i<int(v.size());i++){  
: a* L& G3 }( {/ B# K                        cout<<v<<",";  5 x5 |  \5 U$ h+ W! |' X
                }  * y" b! Z+ _$ h! L9 `
                cout<<"\b}";  
, i7 T+ e& @  o/ n# ]: ~% m9 y        }
- k$ y3 y$ ]4 C* j. Y# a        else{% l# T( D0 }5 j: C
                cout<<"{}";: m4 P' n( k9 q" A0 _+ _
        }
+ k8 n# F2 F5 |  H) V4 _+ o( s8 a}
0 q- }" s( ^! |# w! b2 V $ K$ v% Q$ B1 D
//容器vector中元素的去重: O! k8 a& b3 n/ h# n/ ]/ r  b
vector<int> unique_element_in_vector(vector<int> v){
# P$ b" h  q  ^        vector<int>::iterator vector_iterator;
4 X* Z: W0 k4 Y- |4 p; J        sort(v.begin(),v.end());% t5 V" \  S0 X0 B) S6 ?/ x% q- p* x. d
        vector_iterator = unique(v.begin(),v.end());; ]- Z+ k+ b% r+ y
        if(vector_iterator != v.end()){3 K2 p  N7 m7 |2 p" e# |" [
                v.erase(vector_iterator,v.end());
6 x! g* @4 G6 \2 v9 P  b$ P. o  \/ \        }( O8 V$ N1 `, s  Q6 i
        return v;& c9 H) A& @3 c3 C
}
- b: p" ~( \1 |9 E3 J
( g, Q2 C$ b" w' A2 l! y- p/ }//两个vector求交集0 [* v$ q8 }7 W& w' G* c
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){4 ~( n7 T6 t% ]
        vector<int> v;6 e8 z6 @* Z8 G# g8 h
        sort(v1.begin(),v1.end());   9 S: G* i' k0 h0 K/ g% j8 T
        sort(v2.begin(),v2.end());   % M" N+ u" s# Q' I! K
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 f2 ^. s& w& y' O/ T2 E% [7 {  l
        return v;* Z/ n5 l" w* |7 D. [* V
}) M" b9 T; i" u1 J' y& e

, Z" R# @% h/ V& n' K0 h6 G9 ~( c% T5 J) S//两个vector求并集/ g2 G7 z: @+ }. }
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( O0 T& X. K5 y8 g. z  X# N        vector<int> v;8 y3 q6 G' M0 L  P7 d: f
        sort(v1.begin(),v1.end());   " M3 z* E, }# Q. ?% s" o9 V" j6 Z
        sort(v2.begin(),v2.end());   
6 z7 f' @0 N6 y3 u/ Z        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 9 ^  \4 v3 P/ Z% r2 G
        return v;! H- R& _) A2 I" C* t7 D" K
}% e  v. b& b; t9 t& ^# O

3 R! t' F) O) m, z, L0 r//判断vector的某一元素是否存在. L% y7 v" L1 V
bool is_element_in_vector(vector<int> v,int element){! ]# u0 U  c+ @8 I0 h; }( p! c7 `5 Z
        vector<int>::iterator it;; `' o$ i: g/ z* i7 I5 W: N
        it=find(v.begin(),v.end(),element);
8 e# k, p: O2 t7 X( e0 M) d3 e( f6 `        if (it!=v.end()){5 \# G/ I: k1 y4 l' t
                return true;/ h) U; h" Z3 E
        }
  N7 u$ R1 [, u2 d4 P& E' C' [# o, Q        else{
6 ^3 Q* `0 P- y, b& Q' b  D6 ]- M+ ]                return false;  i( z% N! @1 s" ]: R. a
        }+ G. ^) q- V) @3 u- ?5 i  S
}- y' B" g  r7 ^5 A: D4 b+ Z
5 F) y( d: X( @
int main(){# y0 \8 a1 i' h; |8 N$ ]4 ~" D2 O
        vector<int> v1,v2,v;8 o2 _3 j, n6 ]+ v! N8 ?
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);: v0 k) I1 \, A" e- i0 k& V0 ]
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
  X- G/ O' N# q% h6 Z        cout<<"对v1去重:";# D  r) S$ S! r
        v1=unique_element_in_vector(v1);
4 l' S! b; w% @" Q- x. A# l        print_vector(v1);; Q! b- a" `. {5 q. Q- N
        cout<<endl;
+ A/ A* Q7 \8 K: a2 C8 R        cout<<"求v1与v2的交集:";
. W& G4 D/ w' T2 A! @! a+ H% K% f        v=vectors_intersection(v1,v2);( p, u9 e4 v. [4 y( z  e
        print_vector(v);
' [. l; `( ~9 z( W8 {8 u8 q        cout<<endl;) H$ {& ^! U& |$ ]4 J9 J
        cout<<"求v1与v2的并集:";7 y. O5 _# B. ~1 b$ T% d
        v=vectors_set_union(v1,v2);# w3 E+ S1 g1 `3 o* a+ E
        print_vector(v);' [6 r* v0 Z) U! x  \9 F( V
        return 0;+ e) O" y3 A: b' H  P& L: S% c
}[/mw_shl_code]
; s+ t2 D, I! ^# j/ i; R- 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二次开发专题模块培训报名开始啦

    我知道了