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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

+ q" h# Z8 `: A! ~1 L* d6 I4 T( [7 R) o" _$ o
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:$ i3 c( }/ j- G. y
[mw_shl_code=cpp,true]#include "iostream"
- N; M  Y7 @9 I6 s# v8 D) v9 F#include "vector" / P1 C: n; v) a& n
#include "algorithm" //sort函数、交并补函数# G- X$ @) B7 k$ r" L1 Q; N+ u0 I
#include "iterator" //求交并补使用到的迭代器
+ W  Z$ l( u4 }% W$ Uusing namespace std;
! ?: f! M4 E( _1 d6 s
$ K7 t  t% H, ]4 {9 d; I% r) V8 Q//打印容器vector
; z* p( b* ~5 f  a0 M. P7 N5 J3 tvoid print_vector(vector<int> v){
; u9 G& [- P! @  V4 t        if(v.size()>0){
. L, R# T2 w* a' w0 j                cout<<"{";  ) V( x9 t/ h* O' h2 I" Q" f: _
                for(int i=0;i<int(v.size());i++){  ( e( B- S; ?. f* H$ X' n
                        cout<<v<<",";  
7 |" O1 H* X2 _4 V                }  
! c1 g7 O! ?* G# N" g' g3 s                cout<<"\b}";  
5 _+ O5 ]( \8 _, b6 c( k2 F        }( g& R8 i& c3 p
        else{: j9 S4 H# @1 T
                cout<<"{}";3 E3 g( h/ g9 o* u& s7 b  s0 g0 D
        }7 K0 j  j& S; r% `
}
3 [; b& P+ u7 r8 ~4 | ' S9 w$ K& a9 K3 C- X# K8 z9 h
//容器vector中元素的去重+ }+ R; k& H8 ?+ E4 j, X0 f
vector<int> unique_element_in_vector(vector<int> v){
9 ?' Y3 w1 S* K. E5 f        vector<int>::iterator vector_iterator;5 y3 J: Q- ]) u" b$ c' j
        sort(v.begin(),v.end());# X+ ~( x3 P. _; H) s& |
        vector_iterator = unique(v.begin(),v.end());
- l7 E2 J' _" p        if(vector_iterator != v.end()){
# H4 x' a/ ~4 q                v.erase(vector_iterator,v.end());
2 [! J1 Y) \2 l1 {7 }" o        }
2 }2 p( B* {, C8 B1 y/ j& P        return v;
) F2 [$ h  `7 j}- w/ y' Y1 O) K
. B' |; {# O0 f( i% R* I
//两个vector求交集8 @! E& J2 q+ R! w+ v: C, W- t# ]
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){, L/ `* b+ p. R0 K8 T
        vector<int> v;6 L0 Z+ z. C* Q4 k, q/ t
        sort(v1.begin(),v1.end());   
6 E" p* m3 k  m3 g        sort(v2.begin(),v2.end());   
# @1 r2 i1 C; _" b9 B, e# H& o        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
5 H. O% z! ?2 [5 `& L8 x. W( Q        return v;
: N/ y( j1 Q! _2 B4 M}
3 _! X  W/ C$ I  S
. F, e- r* L* a" v8 e3 }//两个vector求并集; Q5 s, D' C' b& _8 K
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
8 j% p0 `0 m( `9 x" |9 I, L/ f- s/ ?        vector<int> v;6 ^. ?0 l8 c1 i& R( q  R
        sort(v1.begin(),v1.end());   
+ W; U1 k1 `1 W4 q; X        sort(v2.begin(),v2.end());   
4 L( ~7 x! L2 G5 Z        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
& `+ n1 Q- i9 p' V" f7 L3 [* E        return v;/ p$ g) ?# s0 s- y4 {; |1 l
}
8 M* k; P2 E7 V * R0 G6 f  P$ o- `4 S  v- P
//判断vector的某一元素是否存在
5 j- ~9 @! m9 |. Xbool is_element_in_vector(vector<int> v,int element){2 t( F7 R( m( B. m) t( _
        vector<int>::iterator it;
. I' f5 ^) P1 h+ T) d) \2 S" b        it=find(v.begin(),v.end(),element);. c% |2 g8 O( g
        if (it!=v.end()){
- ]! s( O; D' v1 o) |                return true;. E3 s& I% c2 i
        }8 W4 `- l/ w8 |, E* s0 _
        else{: Z  ~1 \4 k1 d# C! C) H, V; P! ^
                return false;" g. D+ {; {: O4 c6 W( ?& r
        }
7 m/ M5 Y; I( D$ Q" R}
7 }6 l7 L! ]  h* R 8 |; i& I+ N9 I$ d: f* V3 s
int main(){
9 e$ E- f7 `; m) U, G% f, g        vector<int> v1,v2,v;' D4 @* c; ]0 O" N4 g
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);5 p! o" J0 m2 Y/ w5 l( Z* @$ m+ A4 o
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- p# H& \- p, P) l6 Y- ]' ~. L) g  _
        cout<<"对v1去重:";8 s  e$ g4 s0 Y% H. i
        v1=unique_element_in_vector(v1);
9 V3 h: I& C/ |8 e        print_vector(v1);1 @! O/ t9 W$ `$ o* u
        cout<<endl;
% h8 E7 L; k0 @, @4 M        cout<<"求v1与v2的交集:";9 j% q- `+ H8 x4 Z
        v=vectors_intersection(v1,v2);
# L5 J. s/ Q( ~, ^8 ?        print_vector(v);3 ^8 U4 j4 o! z- e% L# K# V% D
        cout<<endl;
3 p0 S' F7 I) t6 J        cout<<"求v1与v2的并集:";
  [! k+ Q( O" r4 d5 ^5 T* r        v=vectors_set_union(v1,v2);* F$ b/ Z# }' h( o! m
        print_vector(v);
) O# G) n0 J% @. K1 A        return 0;2 F: \% g6 w$ K6 }5 p
}[/mw_shl_code]; w. _: f5 a, i( Y; ^+ w, e! z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了