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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

% C% n! `+ F8 ?# b
; E0 c2 V7 {% XC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
! H! f: X) N9 C6 i6 H+ D# ^9 L; A[mw_shl_code=cpp,true]#include "iostream"
8 @3 n" n4 p* a2 ^0 V/ ~#include "vector"
4 G3 `  C+ H3 r: \9 m#include "algorithm" //sort函数、交并补函数) }7 b9 t1 `/ K( m* E
#include "iterator" //求交并补使用到的迭代器& Y' K6 l, Y( b; M- I
using namespace std;
9 r2 f& C7 y7 L $ O/ D' i; z+ e. s
//打印容器vector
; ~/ h7 ^& e% }2 S4 ], N' zvoid print_vector(vector<int> v){6 j; ~/ F1 D$ V
        if(v.size()>0){
. ^& O* B$ A9 Y# c3 D) F' i" f                cout<<"{";  ; C: O0 U6 z0 p; R" f- T" ^
                for(int i=0;i<int(v.size());i++){  
, x2 O1 M# {5 Z- X1 a3 _                        cout<<v<<",";  
% Z. q6 M5 x1 _1 P6 h                }  
0 x7 b% T5 a2 B6 }- d2 K& }* I                cout<<"\b}";  $ x9 e# w. Q0 P8 r5 `  c+ P: U
        }
; E6 B( q9 v  a3 p# c/ U3 P        else{& s+ S4 ]: h* E" \  y* r
                cout<<"{}";
) a. u+ [9 U8 ]- o: w& I        }
4 W& e- j4 E7 f4 V/ `" C}
& k8 V* d, t$ E # a2 u9 W6 W7 G6 W* {/ g
//容器vector中元素的去重
. f- O( q: m% h) d- }vector<int> unique_element_in_vector(vector<int> v){0 _. R6 w4 s. v8 y8 h
        vector<int>::iterator vector_iterator;- b- e$ V& p9 K* Z% K
        sort(v.begin(),v.end());
/ u8 |& y% Z5 n* B2 W4 [        vector_iterator = unique(v.begin(),v.end());" }/ C5 K9 L) y+ u3 x
        if(vector_iterator != v.end()){0 y1 ]8 S8 }7 B1 A2 v/ m
                v.erase(vector_iterator,v.end());: L: `" Q) [  R) G% J
        }8 m$ r, ~8 h& s& L8 C& g- ~, X
        return v;
6 c4 s' t& l& x8 G}6 u' X$ [; _% s. i* D1 F

  y- R( [1 q, J//两个vector求交集, u' q. l! I$ |  T+ n
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
3 f. u: H4 K  N/ B; c        vector<int> v;! N% i: j2 Y  a2 y  p
        sort(v1.begin(),v1.end());   ! P( {: e6 I" m( v/ x+ G( h" ~: P
        sort(v2.begin(),v2.end());   8 V7 w8 g7 M+ @9 R8 F5 f9 _
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 8 G+ [; N; j, u% E2 w% n
        return v;
$ Y' L0 [% a9 p& C( {}* T- Z. K# h: m5 |. u( t

! d! }4 |* t" T$ `1 }//两个vector求并集; j/ ]) X8 e- e2 `6 |
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){4 x4 M4 M# d3 y$ `2 [5 }' ]
        vector<int> v;7 s/ x8 a" e# U0 u3 g4 a
        sort(v1.begin(),v1.end());   
) |- o5 h. L- T; R: E  e% E6 y        sort(v2.begin(),v2.end());   7 H5 Z  r: t7 S% K
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
# c/ C' W% J# k7 S        return v;$ u! M6 R: j3 |& k5 g: C
}
* _8 E# Y, r$ O" J0 i7 E
. @5 P+ i, g* m% ]9 l//判断vector的某一元素是否存在- n' u" T# s7 z. M5 }
bool is_element_in_vector(vector<int> v,int element){
. n4 P" a" `* p7 g        vector<int>::iterator it;
4 v9 z- n+ e# k        it=find(v.begin(),v.end(),element);' ]/ _$ j( h4 h7 o) e1 a
        if (it!=v.end()){
$ u& `1 R) J3 R# {                return true;
- q5 L& B: r( z: y0 C        }
! ?7 J7 i9 y* h8 |; m5 y5 M        else{
8 _; r( T9 z$ k/ O                return false;3 m: U0 i$ j" r3 M3 e1 E$ s; P
        }
! @5 h; c0 K" A5 v( w/ ~1 q9 I& v}
  ^, O; z, H9 m1 O . r: |' h$ _+ ?: q( z
int main(){- y/ ]+ h( h0 U4 }% V! [, d4 ?
        vector<int> v1,v2,v;0 C$ a- O6 w; j7 `6 f
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
* C4 @1 U6 L; D) v        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;3 Z+ a: {  K% l1 B
        cout<<"对v1去重:";
: V  x) g- [" Y+ ^        v1=unique_element_in_vector(v1);
; |# H  Z, H! q" K$ G+ i  t        print_vector(v1);( g7 h* t+ B0 i8 _4 y6 u
        cout<<endl;; n: t( u* F4 Q' K. U
        cout<<"求v1与v2的交集:";$ c) r' T: j2 d& p+ }
        v=vectors_intersection(v1,v2);( e- o5 x* ?( \) |* F
        print_vector(v);
% u( W1 I3 N# l/ k# R* m) S& ^        cout<<endl;9 R' w! g" N$ ~* b8 K4 p& W
        cout<<"求v1与v2的并集:";8 l* Z: z( L4 J* G( p6 L, k
        v=vectors_set_union(v1,v2);" m( n" U' A9 {! ~' B8 J8 @2 E
        print_vector(v);
: P2 B6 |! k$ H        return 0;
, r) a; |1 }- r  C- {" h}[/mw_shl_code]+ B$ g! E3 V+ ~# [. G6 i5 U
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了