PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
* |2 l5 ~* T7 N. z* D
$ B: v6 f) a0 J1 S6 m0 d3 @
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
6 l; K4 X) R2 C: q6 T[mw_shl_code=cpp,true]#include "iostream"0 l4 u$ J7 H! ~* ?
#include "vector"
5 A1 t; x& Z7 D" c" ], a0 j#include "algorithm" //sort函数、交并补函数1 d1 u- ~0 a! i) |  h
#include "iterator" //求交并补使用到的迭代器( m; l" Y8 u3 }1 h
using namespace std;
, V4 T: F3 g. {! c. A9 @
: V; N, Z+ C! i; A( H//打印容器vector
& l/ A% A6 o' h$ q2 Nvoid print_vector(vector<int> v){/ b" i4 Y6 b5 @; f% \: ~  J
        if(v.size()>0){# k1 \: K0 ]7 j- C
                cout<<"{";  
- [$ z4 F, ]& A; u" T8 Z! ~                for(int i=0;i<int(v.size());i++){  $ N2 Q; ?* `1 r9 K" w
                        cout<<v<<",";  - Z# ?2 k5 L- d- y/ u5 I' {
                }  
7 J5 i9 f' F. n3 G                cout<<"\b}";  
% _- S% |1 D7 Z) G" X0 l        }" O8 C" ~3 c; A4 `( @" I8 i
        else{- e' M8 E3 C& P" N1 ^0 w
                cout<<"{}";3 s3 B/ X- |5 q
        }
! ^/ K2 y3 G$ P/ B  K}
4 D( Z+ t( p. A  M+ J( X$ f1 P
0 E$ ^  ^$ |! F! R0 M! C% k4 C) @//容器vector中元素的去重
: W! Q- ?  V# @) ~: Svector<int> unique_element_in_vector(vector<int> v){; j# [) w% b" @  [- R
        vector<int>::iterator vector_iterator;
8 Y8 S9 j, C3 p0 d: d( w        sort(v.begin(),v.end());- o, [; X0 J. j, r0 R  ~2 v( l; C
        vector_iterator = unique(v.begin(),v.end());
0 _4 l$ I4 _7 F% j; X7 O. x3 ]8 `7 ]        if(vector_iterator != v.end()){, |8 y/ t  v* P2 ]. F
                v.erase(vector_iterator,v.end());
1 i- Q7 a! k0 b0 G! [5 |        }& w% B, ^# f: f3 E2 t' c# U
        return v;: ]& q( \3 S! v1 k. _+ P% I
}/ S1 W) o7 k  {6 v% ]1 [) T
6 H: {9 }/ }8 @% N8 f7 Z! s
//两个vector求交集
/ l' K: f/ {4 L  u$ `: xvector<int> vectors_intersection(vector<int> v1,vector<int> v2){( u, n- H! ]1 |, x7 o, C' k! R
        vector<int> v;- x: U/ p: @6 I- V0 b
        sort(v1.begin(),v1.end());   & {. {5 H2 e: Q# Q- m3 _
        sort(v2.begin(),v2.end());   9 Y& p; I0 R2 d: V6 V
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 h3 H* T& L% ~/ Y4 Y        return v;! [3 V/ a& _  ^( I/ q; ]# R
}: ]) z& T3 Q$ I7 @2 D' g, H: f
( y, t- J8 K$ {
//两个vector求并集$ K9 \0 B# t6 K3 o; j
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# v( I( l9 c- L% E        vector<int> v;, e7 A9 n4 e" G/ C) ~
        sort(v1.begin(),v1.end());   
1 C8 \  s1 `; I' M+ p7 |        sort(v2.begin(),v2.end());   
, |  V- I" ^% e& l2 V& G& S        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
/ y$ c3 @4 i/ H        return v;- L5 i3 _% |7 R. E! y! `3 `2 c
}
2 p& o1 ~- S, D4 d% c1 N6 b  V- k ; }& q% b2 V& Y; O
//判断vector的某一元素是否存在
" J9 ^9 m3 k/ G4 f; K. Ubool is_element_in_vector(vector<int> v,int element){
. N3 z+ P, b; R        vector<int>::iterator it;& w. R) n# r( H: m
        it=find(v.begin(),v.end(),element);% R7 g9 N" U2 E( H7 l1 E- C
        if (it!=v.end()){
7 e0 c+ M+ |1 y9 \6 N. x                return true;
! x, D8 ]/ `3 v        }3 w# x, \( d/ m" K' x) P% t
        else{. X' I6 b1 Q3 r7 I# i
                return false;
1 c0 D6 }: j6 g0 v8 P/ g* E        }- u' u  p. u1 e
}* o$ V0 J' U! |# }# ~: p4 L% f

" x" i3 a6 W+ ?) u5 |3 Nint main(){
, C5 Z8 r# N  R! D7 \7 m: t5 H        vector<int> v1,v2,v;
6 V, [$ m8 A3 N0 s" y        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
5 n/ X" p/ B5 m+ v) z5 y        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;' U" V% }+ P# x. a8 E7 F$ C: v
        cout<<"对v1去重:";# Y& }5 m$ M, O9 i
        v1=unique_element_in_vector(v1);! R- {8 u+ T) q# f' O, }5 X9 B
        print_vector(v1);
0 R, F5 [+ _! o" N! j2 O        cout<<endl;
: P1 a7 @3 I% v9 h4 X0 y$ e$ K, R        cout<<"求v1与v2的交集:";
  B0 f* \6 K7 J1 a        v=vectors_intersection(v1,v2);) @' Y9 i+ W% x2 A  G5 c
        print_vector(v);0 P% x1 e6 h' Z* d) J
        cout<<endl;
( L3 @) F6 \, V6 n        cout<<"求v1与v2的并集:";$ @& \: l/ @- G  W  o0 l
        v=vectors_set_union(v1,v2);  }. `- ?% N* G/ N0 I
        print_vector(v);
# u5 s& a4 ^) `        return 0;. V- @$ z, S9 m+ o% Q% t# G
}[/mw_shl_code]
1 x  s; x# ^' h1 r- m( G
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了