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

[资料] 元素是否在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
: D2 S4 T. O4 N; q/ }
2 F; V! ?5 Z; M0 T8 L  y5 D
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
% Z8 N- B0 S9 o0 n[mw_shl_code=cpp,true]#include "iostream", w! J8 e! Q& G' }& O3 p7 O! P' _
#include "vector"
8 o. ~- L0 t  w& g7 X9 p#include "algorithm" //sort函数、交并补函数' ~0 f0 Y+ K0 w. d3 ]0 e  t
#include "iterator" //求交并补使用到的迭代器0 H6 y( S% ], c! M' ]. J
using namespace std;
! u5 c* \1 C2 _1 G' A/ [ + ~( o$ i1 T+ t
//打印容器vector3 Y, A0 L( Y' x$ k+ y3 a3 [
void print_vector(vector<int> v){# a- G; W6 x: z5 ^
        if(v.size()>0){- p" A1 u' @' W  x
                cout<<"{";  
3 y  I" H4 {5 B; g1 [                for(int i=0;i<int(v.size());i++){  
, K$ J6 W0 q% W2 S                        cout<<v<<",";  
/ U  j; z2 X5 U  b6 ?% p                }  / e2 T+ i& }' u; J$ y% a  H" C
                cout<<"\b}";  ; ]  Z! _3 k" ?% J* M1 n. N+ C
        }
/ S+ t2 y8 ?- F& w        else{
5 {" ]* c4 r0 u7 m% a2 [                cout<<"{}";* a6 ~- W8 g4 b0 A
        }
9 N$ _0 F7 C  o; v1 A5 r+ B}
  R# \: {2 U% ` 8 i+ S# ^  h1 k- g" o" Y3 C& N
//容器vector中元素的去重
  l! a( q6 D, h3 k$ z2 @vector<int> unique_element_in_vector(vector<int> v){* b1 a4 k; ?6 A6 q
        vector<int>::iterator vector_iterator;8 y: t5 s/ V1 g
        sort(v.begin(),v.end());- F, b1 |% ^3 {" p% s6 ?
        vector_iterator = unique(v.begin(),v.end());2 J7 `# f4 ^% m1 S, Y
        if(vector_iterator != v.end()){
, v( N. A1 q. u- i9 V                v.erase(vector_iterator,v.end());; J: ]$ R- i9 g9 r
        }
' O3 e: R1 I, h        return v;1 C# h" V8 u; s# b
}
- g+ y4 B# ]: L% q  M 3 ~) N  D9 X' C' B4 g# k
//两个vector求交集4 t5 E' v# K' U) {1 x. H5 p
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
: a6 K1 I( r& a  N0 L8 Z* x        vector<int> v;
# n: c, k4 F: u, K; b- X        sort(v1.begin(),v1.end());   
) J2 f" \" T$ w8 r        sort(v2.begin(),v2.end());   . T3 z# n$ k+ b+ t: x$ S: `+ N' _6 U6 S/ F
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
9 a4 `9 X8 K* K8 ^( |! ]( g5 n        return v;
4 Y9 q+ o3 Y) e, j* y( d}3 a. g9 `. V6 l) z& S' Z) g

7 L7 E4 P* R. c5 \8 U0 ?. Q//两个vector求并集
% ~- `. S: S9 Ovector<int> vectors_set_union(vector<int> v1,vector<int> v2){$ C* J9 Y3 S3 _! L1 t
        vector<int> v;0 V( N: M7 G8 K3 Z9 `! G' c7 b
        sort(v1.begin(),v1.end());   
7 T! l( o% q$ n* d        sort(v2.begin(),v2.end());   # g5 R9 y* o5 i/ o& i; k6 p
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
4 n/ b# I8 x3 f7 H        return v;7 D" x: a  N8 {- O$ H1 P  I3 {* [7 G
}0 ^- Z# M' B5 X6 E4 ^, e* v+ q

( `9 ?8 m4 Z' w( ?//判断vector的某一元素是否存在8 |4 I+ S8 u: N2 X. M
bool is_element_in_vector(vector<int> v,int element){
$ r. C/ X$ ~3 U# h+ X  z) C9 N        vector<int>::iterator it;
, ^$ P! {; Y$ U+ K; Z# [" s        it=find(v.begin(),v.end(),element);4 m; t4 H4 r: {) O$ U' N
        if (it!=v.end()){9 d( y# p/ [, w0 Y
                return true;4 E% F, _9 T8 k: Q
        }' M* j7 M0 c9 b( c3 z
        else{% U& ]9 U7 \# b& D. I* `" y
                return false;
/ Y% a+ ?4 ~7 m) D        }
6 A6 p! ~2 q, z" d8 m# V4 k}
: [  n  _; _  h  C$ ~6 L
& Q1 I0 K' p( u& A: `int main(){* J( R2 N$ Y9 a( F' x- y
        vector<int> v1,v2,v;
! T2 o7 u, @  {9 C; o# G  `8 t        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
! S7 a7 f2 I$ y! B/ M. |        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
) K, S1 J1 P1 ]8 O$ a        cout<<"对v1去重:";
1 I4 A1 G- N. w% z3 d; K6 g        v1=unique_element_in_vector(v1);6 \. x9 ^% E) h; h2 c
        print_vector(v1);/ c$ U  ^  h# G1 G; r: n
        cout<<endl;2 g. Y$ r* G; l# A5 g
        cout<<"求v1与v2的交集:";
( E5 r  c1 d1 }8 U* ~, e! C        v=vectors_intersection(v1,v2);* _" A5 O7 l2 O! T7 Q
        print_vector(v);7 y" P  B7 S% S* F: q( y) Z
        cout<<endl;( @; Z6 C1 U( e# C5 ~
        cout<<"求v1与v2的并集:";6 V! m3 ]6 M1 ?" t$ f( j3 d
        v=vectors_set_union(v1,v2);5 Q/ h- w6 q6 n" k
        print_vector(v);( p% v' e7 }' f9 M
        return 0;+ D) B2 U* ~) n/ u7 _* l
}[/mw_shl_code]: U# J( F+ H5 H. v. u  Z' W  y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了