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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
3 L9 b' p7 Y" h' V% @
1 P( }7 E; Q3 l; N7 M
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
8 s2 M9 A0 ]( W1 y6 u1 R0 z[mw_shl_code=cpp,true]#include "iostream"& i( O1 I5 S- R- Y* [2 \
#include "vector"
, Z. z2 H( [  g  K. ?#include "algorithm" //sort函数、交并补函数
5 z- z& R4 t' w; N4 P$ T#include "iterator" //求交并补使用到的迭代器
5 v: _  @) x4 R6 ausing namespace std;
. b7 g* @4 j: {- u , s6 c' H+ M" c6 W1 q
//打印容器vector# Z4 _/ O. i8 c
void print_vector(vector<int> v){
, k1 @' X# V/ ~' n1 K        if(v.size()>0){  f: V5 |1 \; ^  v; M
                cout<<"{";  1 C- @; [/ n; k/ _7 I
                for(int i=0;i<int(v.size());i++){  
  m, I7 F/ Z+ Q1 [7 M                        cout<<v<<",";  
1 C- P6 Y/ p+ L) C; m                }  % n6 P1 G: a; [+ n
                cout<<"\b}";  
# k& N1 G3 z1 k- H! c        }& ^$ o6 T: z# Q3 t( j. @  t& b
        else{
! |6 J$ R& g6 O. q5 |3 V                cout<<"{}";7 T5 Y3 C% Y5 s4 p1 u+ \
        }
& B! c+ ^0 Q9 G! h% X; f/ u}9 j/ k& `  @2 [
! ~# p" @0 `) e* w
//容器vector中元素的去重* Q+ e, f2 U, [9 t) S6 i6 ^5 a
vector<int> unique_element_in_vector(vector<int> v){. ]. b1 w; O! p$ D$ z
        vector<int>::iterator vector_iterator;
, O+ F9 r/ F4 J8 w' h  E. X# }* U        sort(v.begin(),v.end());* }" |( N4 M5 n$ z
        vector_iterator = unique(v.begin(),v.end());
. [# H) s+ @. D% x" P# g5 ?7 f        if(vector_iterator != v.end()){# m9 b) G  ]6 R0 l8 @0 r( @8 M
                v.erase(vector_iterator,v.end());
7 e6 g% _  u2 ~% ^4 b7 _        }
% E+ v5 B( P; B/ G9 y9 l        return v;7 H% o/ m- g( F( O
}" w, P) V% S, t# z' Q
0 a) q; ^9 {; [' x0 g# d
//两个vector求交集
" G7 A% B) e' |: _. `" c2 B8 `vector<int> vectors_intersection(vector<int> v1,vector<int> v2){) F5 Q5 l8 |0 H5 t
        vector<int> v;
0 v4 C& I" v7 n9 |- S        sort(v1.begin(),v1.end());   5 _- ]" B6 ?1 C: v
        sort(v2.begin(),v2.end());   , Q- V7 T! X4 z$ D
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
, r6 u0 Y! p. f  Y7 Q% D        return v;
0 f8 i+ u! e) w* `& x3 s}8 ?$ w0 B. a5 L  h* m- x

* a; J% r( `% k//两个vector求并集
1 x+ y0 j( T2 }vector<int> vectors_set_union(vector<int> v1,vector<int> v2){6 u; W' [  Q" [2 ]2 D' U% b8 \4 j' D
        vector<int> v;
5 W. ~, G$ w* \  R/ G0 S        sort(v1.begin(),v1.end());   
: b& W8 N! a4 C        sort(v2.begin(),v2.end());   3 y9 M/ g, f9 y' Q  v
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 " X- ^8 @. S* L8 ?: Q- [! E: }9 `
        return v;
$ L" Q) J$ j7 r4 r}* j- J2 l6 a4 @$ D# v$ D
, L5 g9 U9 a/ L
//判断vector的某一元素是否存在3 y$ B/ Y& k# k" S
bool is_element_in_vector(vector<int> v,int element){: G6 x' v  ~8 A- I& J& p2 R
        vector<int>::iterator it;8 g  l, Y2 ?4 l1 `1 k8 Y
        it=find(v.begin(),v.end(),element);8 S& D- g, t1 j3 |% k
        if (it!=v.end()){5 R; _/ D% a) B
                return true;
9 B4 a4 D0 d/ X& r  t        }
; Y6 Y& ^/ R% ?+ d, b" l7 ?        else{
# f5 c- D. Q1 Q                return false;6 t" \2 K8 ]& `8 C3 D5 |! Y
        }- u- O+ ~. ?- I9 l$ \5 }/ G0 n+ \
}" j8 Y/ _3 X7 }: N3 T9 i% \- _
( R* A! s+ B! J+ b6 k
int main(){
" w0 m- T* s4 F5 q! v        vector<int> v1,v2,v;
6 l  I5 i! e  ~2 U$ a" @  e. p% X        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
. q# p2 l( G& K% \0 q2 u& R+ ^        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;/ a. t9 G: }, F  x5 f  `& J3 F
        cout<<"对v1去重:";: P3 f- G$ t/ B2 [' N
        v1=unique_element_in_vector(v1);( E4 r- L- G. n, h$ M
        print_vector(v1);. X  H$ v& g9 \1 f5 F" y; ^( V" B
        cout<<endl;7 h4 ?) @" g5 J; x8 p
        cout<<"求v1与v2的交集:";
- [& x- l  h" F3 t; L: ^. ^        v=vectors_intersection(v1,v2);
% h7 O2 K3 r) a! J        print_vector(v);% V, }5 k  t9 m7 b- q# P  e
        cout<<endl;
; ^( ^8 P, x1 J. Z3 s        cout<<"求v1与v2的并集:";
, G+ d& A2 W& g" g  o        v=vectors_set_union(v1,v2);
9 C& F# d6 B* _" h        print_vector(v);
* u7 u& a5 z- _8 c        return 0;
1 Y3 N1 n! G4 S6 w  ]) H}[/mw_shl_code]
- U6 ~! h5 [2 B! b( @* ]
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了