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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
5 i0 F, W. Q% z
6 A& Q* N' t9 {4 J2 p+ l
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
  W0 J, u+ A0 \! \: V  g" g[mw_shl_code=cpp,true]#include "iostream"3 s! ~" L2 g( @. @5 {- V( m2 f# ^
#include "vector" . f6 s4 ]: c/ B# ~4 W& a3 u$ B' h
#include "algorithm" //sort函数、交并补函数
% |, I( B% z& I4 O- I#include "iterator" //求交并补使用到的迭代器  B: T& w1 B$ \. a) z
using namespace std;
! j+ t. X" K9 a2 s8 t4 y5 m/ _ # ]% {  P1 @) J* h# _8 x
//打印容器vector8 f! @2 ~2 K2 z- }% U8 C1 p
void print_vector(vector<int> v){$ `0 g6 k( s# @7 X6 M5 C* q
        if(v.size()>0){0 ]! T& s- D( f! e- o! y9 e/ @
                cout<<"{";  
$ Y/ P/ ^6 j3 e) ^3 B                for(int i=0;i<int(v.size());i++){  
' h: ~& E. z4 I; F                        cout<<v<<",";  
6 @. V1 y" g& e5 n  V  Y                }  7 L9 C$ B. H- X
                cout<<"\b}";  1 n; }4 ^7 T6 u6 F/ t  I
        }
9 ]5 N# _6 `; K3 J; p1 H$ |" S: E        else{# c) i" Y4 I$ q3 f) ?# u
                cout<<"{}";
6 V! J+ h# e0 ~6 R        }' y" n, ]3 }3 q. K  l* U( m
}- D7 W6 C9 c9 O# R/ h0 Y! u

" [$ F; V- A* B$ V; }//容器vector中元素的去重
# p+ p1 Q& }. a/ A! l% Xvector<int> unique_element_in_vector(vector<int> v){
6 Y. _/ F( a6 ~6 O" W+ W8 q! A        vector<int>::iterator vector_iterator;
+ r' C" A# x. z# T% w8 @        sort(v.begin(),v.end());
5 S) A5 j8 l$ U2 B7 F) |' [0 j. u        vector_iterator = unique(v.begin(),v.end());
% h7 T, T0 x* r- A/ n- t3 f        if(vector_iterator != v.end()){
8 B* D, W0 M0 K2 O                v.erase(vector_iterator,v.end());
5 e! m8 Y! {, r1 G7 R. Z+ G+ z, r, F        }
5 K9 K4 Z3 z$ w        return v;
) s' c  L' B* c  _" }6 q}
0 _$ X( T- L2 a/ H9 y4 d 7 ~  A+ K3 L/ O1 _0 ^
//两个vector求交集, i8 h3 [4 L: T) r
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){3 Q* W1 a' O) Q' r
        vector<int> v;
) }" K, @; f& l: S. I  L        sort(v1.begin(),v1.end());   
3 C9 G  ?# Z1 ^7 {: a8 Z        sort(v2.begin(),v2.end());   2 h$ W! }4 P1 M$ F1 a
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 + O% K; j+ m+ Q/ X; ~/ |3 P7 D! F6 h
        return v;
/ `' [* l) d9 X) ?0 c, l* |}
( U1 ?- [/ B9 V( k+ _( i : h, Z8 H0 b0 o4 m
//两个vector求并集6 C8 R8 R- y3 g& p4 W
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){/ O  e7 h7 A7 W9 U7 i- U
        vector<int> v;
$ k1 b5 a& N" w1 ~        sort(v1.begin(),v1.end());   6 i2 i& o, C) X- E' y
        sort(v2.begin(),v2.end());   2 B' e0 Q& j" p7 p$ {7 s
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 ]6 \9 W0 P  }/ |' K+ O
        return v;% w4 I4 G. }& u  y" x! g
}
& e( b. s& q( N6 n * H! B, B% H% u6 C6 N) H% F
//判断vector的某一元素是否存在0 M3 U1 T3 M- y6 \' f3 J
bool is_element_in_vector(vector<int> v,int element){# C" _. W% ?2 H( L1 r" J* i
        vector<int>::iterator it;
0 A" J1 F3 D: W/ L9 ]        it=find(v.begin(),v.end(),element);
" w9 X6 e7 Z" s5 @3 c        if (it!=v.end()){
- {- {1 p/ _" g) _* p                return true;
9 k  u: V: \' c( E: m* {6 |        }
$ \7 E! @  ]4 k0 M& n: ]* J8 f        else{/ R% R" M9 U$ ~
                return false;
  l4 c$ X4 \$ f: O0 L$ M5 M) O        }
8 z5 m4 l  _/ k3 p6 h}; J+ j# D! s5 M" t/ C9 M7 B/ n
1 Q+ o% Y3 G# r9 R. C) z
int main(){
, \$ f0 c& {5 h, J; I3 e        vector<int> v1,v2,v;, E5 [5 P% f& B* V" P
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);: Z" K! ^" W. h6 |# v
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;' X" k6 U: _3 z2 ?
        cout<<"对v1去重:";( V5 W) [! H7 j( `  }* w
        v1=unique_element_in_vector(v1);* [+ F: E; Q' P5 |* N( x
        print_vector(v1);5 o( C% T, ~  w, f
        cout<<endl;
5 n1 c: e! e: q, e6 w9 \        cout<<"求v1与v2的交集:";2 R. N3 O# [' Q2 _5 x
        v=vectors_intersection(v1,v2);- k+ g( r& W8 d9 @- @; O
        print_vector(v);2 [3 T- A& |5 U$ o* O- S
        cout<<endl;
. t2 R' z  j/ v; D7 R$ I* |4 V        cout<<"求v1与v2的并集:";" t/ L' N. V, Q9 T
        v=vectors_set_union(v1,v2);2 y: E/ h( P$ v1 Z+ }; y4 e
        print_vector(v);: V8 L( s& n* h7 m/ d' j& c" V
        return 0;
( d) i* u/ v% w0 `, q}[/mw_shl_code]
1 v5 C, t  g6 h7 z8 i- H
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了