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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

0 c: S1 N0 _) t" I6 [, e3 s9 `
' [! e% C' \6 e, S: p" N$ P. cC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
. n. L5 f+ X, O[mw_shl_code=cpp,true]#include "iostream"
' U! [& \+ h0 B5 X#include "vector"
2 u( c% T; a) J" r2 w) o  m#include "algorithm" //sort函数、交并补函数
. Y8 N8 }4 t' l0 S2 ~5 l( V- t/ `0 r#include "iterator" //求交并补使用到的迭代器
0 [1 k, l. M: H. J6 ]. W2 _using namespace std;
; t0 I- P. {& S0 G/ Q
- c' L3 t- m  V3 `& M//打印容器vector( Q" q% I3 Z2 ^0 |( b$ T
void print_vector(vector<int> v){
, W  D' ~% M6 D" h4 N( @: o        if(v.size()>0){
( L, k1 c: @5 p                cout<<"{";  
5 X& ]# L9 `$ _: y$ F6 P% b' w                for(int i=0;i<int(v.size());i++){  2 v1 N/ U; |% @9 D" `3 `9 d
                        cout<<v<<",";  - j5 T  E4 E1 j+ a
                }  
4 a, V- ]+ T$ R' a# Z                cout<<"\b}";  % \* A) s' R1 k' H& g
        }
( S  f) h% x6 k# Q$ [        else{( H4 \5 m- `: e2 `; A: a
                cout<<"{}";7 u3 n  W8 u: W6 g
        }0 |; r% R0 M$ c  N! [5 l! ]% _* |" ?
}3 Z8 Z; @- U# W/ c
5 O( V2 M8 k3 d: y2 K
//容器vector中元素的去重
" v$ z" a7 }5 v# Ovector<int> unique_element_in_vector(vector<int> v){  ?/ `" B$ \# F$ j2 I& S
        vector<int>::iterator vector_iterator;( p5 S( h3 }: M* P' n0 e# T
        sort(v.begin(),v.end());4 S3 R) M$ p* N$ o; {  _& P/ P
        vector_iterator = unique(v.begin(),v.end());
. S* ^( i+ G% I        if(vector_iterator != v.end()){, n) Q2 P8 w% K+ @" k
                v.erase(vector_iterator,v.end());
4 s' B; M6 {8 i  ]9 x: y        }
% G0 i) e* ?0 t( e( U4 o: p        return v;
: H+ h& ~) q3 O- x}, a- p0 {% b' |$ m

! J5 q! E- v1 c' Q  Z( _, y) I* k//两个vector求交集4 d  w2 C; F/ u; c+ d+ F
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
6 j0 \: {. X# V5 q: R3 Z, \2 u        vector<int> v;, z6 y1 x7 G4 L; e
        sort(v1.begin(),v1.end());   . _$ J6 S; q* f" R
        sort(v2.begin(),v2.end());   , i+ X! j' q9 `% v& i$ t
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
/ c6 M, w' f( Q/ m2 X        return v;( P0 N& q7 s& J
}
/ G: q  K) u3 D$ g5 a5 [( |
2 {9 ]' T) b$ Y9 ^0 h: U//两个vector求并集5 P  ]) H$ Y4 o
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){6 Q0 b$ \" p0 H
        vector<int> v;
! @2 \5 _9 \3 O" |& j9 h        sort(v1.begin(),v1.end());   
- n0 z* m& K- ?: D        sort(v2.begin(),v2.end());     P  R) t2 U' U# n. b
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 S9 a; V% z- }; k. x! f3 q
        return v;
( o; ?2 C  Z3 m}2 i: T9 _+ T8 `( q
' D6 W7 A$ k9 d- ^3 m, C6 U" e" Q
//判断vector的某一元素是否存在- j4 H2 b7 ~9 m* ^9 W8 q5 ^
bool is_element_in_vector(vector<int> v,int element){, h0 `6 m+ \; A& ^+ E; {0 B
        vector<int>::iterator it;
) z2 }2 ~* R# I4 I. l2 l" k        it=find(v.begin(),v.end(),element);
2 U9 H! a& ^$ V' P0 U8 q        if (it!=v.end()){
' H" W2 B4 \4 ?# N                return true;
- M0 [3 u5 w3 p& x. g* ^/ g        }
- ?. b: N2 }" T& G0 B        else{0 f( m' a9 Z9 j" T- m: d  q
                return false;9 |3 k- c" u8 }. U
        }/ S& O0 c+ ~8 [: E. \- S# Z
}5 \: Y- z/ y5 U5 p+ M- M+ V! ^: Q

6 d0 J1 c) y! ]' y$ }* Q! G# nint main(){
9 I& _. @0 N4 [3 a; t        vector<int> v1,v2,v;
$ ~0 u, K8 U$ w! \, k8 d        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
0 I5 j1 t' k6 }1 z& n        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;  z7 Z# b4 z% ]  c; ^# w1 H
        cout<<"对v1去重:";7 {0 n9 K! V% F
        v1=unique_element_in_vector(v1);
/ ~) o0 e! O( @# f1 X        print_vector(v1);
( a$ F& a! o  C1 l1 W        cout<<endl;" A  ]1 `/ P9 g$ t; N
        cout<<"求v1与v2的交集:";" k1 H( G  `( n; M3 F% O2 t
        v=vectors_intersection(v1,v2);
5 b& v7 P, e. H, X$ K) A        print_vector(v);) `5 k7 `+ x0 f/ E3 G1 H  Z' ]
        cout<<endl;
2 D6 L: L. ?+ ]% ]6 s6 Q        cout<<"求v1与v2的并集:";1 A5 n4 |0 @9 R! o  O' T; E
        v=vectors_set_union(v1,v2);
; W" \0 a5 l; Y+ f" x$ |' [2 f, |        print_vector(v);- ]- k; z1 z. f: P1 X) A3 p
        return 0;
4 s' q8 |0 M7 F/ J! J3 u  w! N/ ^}[/mw_shl_code]3 q8 d8 C, o/ p6 }9 U% [$ k
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了