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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

- l' Y1 A8 D& Z' X6 |; [6 i$ S% m" d  [7 {4 ~
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:" o. Z9 F: @. h3 h
[mw_shl_code=cpp,true]#include "iostream"
) G. i. d, O+ e5 B  f, E#include "vector"
  q' F- p6 {' L. J8 `1 N7 ]2 |#include "algorithm" //sort函数、交并补函数! n0 H. A! r: @
#include "iterator" //求交并补使用到的迭代器
+ U; F+ b& [, U; m5 e2 z6 P1 fusing namespace std;- f0 b" J: {' ~1 V+ m" v

3 [9 S) k" L, I4 c/ R" @& F//打印容器vector3 b5 t* |4 W2 O/ T& c$ y" V
void print_vector(vector<int> v){
0 F. U; s: a3 J' f- [& T) F" b        if(v.size()>0){
4 |3 H% u5 q- L$ D$ E  O5 B# U! C/ Q                cout<<"{";  2 w- Q, P6 q" R; x+ W0 s
                for(int i=0;i<int(v.size());i++){  + q8 U8 X! n/ ]' D5 B
                        cout<<v<<",";  
+ j( T( b* w8 G2 `$ a9 k                }  * V1 J! h- A, N9 ]% j
                cout<<"\b}";  ( Z$ c7 r( A' B9 _! @
        }
& G- I5 C1 |$ ~8 E5 R7 w6 E4 M: V        else{
$ i. J& |9 J% X3 G& f' e                cout<<"{}";0 l1 v: S% [! J9 X
        }/ Y- M8 v3 z6 _8 P; s: d
}9 L2 Z$ {; o: `' U1 @+ V. N

: G/ t! C. j" x1 A- I//容器vector中元素的去重
( @/ r) t5 ?% ?1 x( [( T9 V6 @vector<int> unique_element_in_vector(vector<int> v){
/ m$ z, T: D% _0 x7 P) X8 f, W' m6 y        vector<int>::iterator vector_iterator;6 G  J, V% P$ {- U8 S
        sort(v.begin(),v.end());' U8 ^3 @4 [2 L' C! t/ V
        vector_iterator = unique(v.begin(),v.end());
9 Z3 R0 R. P0 _& e( U2 c        if(vector_iterator != v.end()){( P' v" w+ z7 O- d
                v.erase(vector_iterator,v.end());; c: o3 V2 b6 W
        }
2 A$ ?1 l2 J& K        return v;0 K( L1 l4 U7 C
}; A! {) Q% H& k
% q* u2 o6 z3 c3 [& W: s
//两个vector求交集$ {0 @, _2 Z, u
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
7 `& y' O! G/ m% B0 d9 v        vector<int> v;
! [3 ]& E- y7 {        sort(v1.begin(),v1.end());   . _' f9 {9 P; e" e" a1 M
        sort(v2.begin(),v2.end());   9 x+ k1 f: y* j+ X2 {
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
# T% }, j& Z$ D) Z4 ]+ t6 T3 M6 R        return v;9 J; V' h* O( n8 [
}  M. k6 K( s" w6 U! h

- W5 i* N2 L$ u, W1 Z//两个vector求并集
% Z( g& i0 X& Y# r3 O, n: {1 ovector<int> vectors_set_union(vector<int> v1,vector<int> v2){3 B6 n, Z) v. Q! P7 j( @
        vector<int> v;) Q! I# p' G7 G' j8 ?
        sort(v1.begin(),v1.end());   - C* V% g" {; ~9 w
        sort(v2.begin(),v2.end());   8 M; x! V0 [" r; _* s1 t! J1 S: n
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
: F% X7 l  I; o2 [& Q        return v;
  i( I& w3 C) N- s) m, x}
" F9 f# M0 O, \3 @  I
, k" r! D0 [( L) l, F1 v( {9 D" M//判断vector的某一元素是否存在* O% U' `; q( I2 q& M; x, |
bool is_element_in_vector(vector<int> v,int element){  z+ c% t  N5 W8 J
        vector<int>::iterator it;
& E. i$ y# Z/ _, ^        it=find(v.begin(),v.end(),element);
% o( i& w1 \6 ~* o$ K5 s# M        if (it!=v.end()){0 D6 X& f; d) Y+ N
                return true;7 z& c& n& o& o+ F% C* u3 {
        }, G! \- O- I- g* v
        else{5 \, f: A" p/ W9 X
                return false;$ R0 F& z0 |2 g, P% w; \: E4 s
        }
- c" v% N% Q- X8 h. V% A* n}1 J8 g* ]& m; r* B

( W( E1 n# a( q; c6 [( o( a7 R, n) Wint main(){
/ ^& e  P9 B; T" o  I  R        vector<int> v1,v2,v;
, ?. E0 Z3 z$ ?$ @3 x6 _        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
% g6 Z( i/ @& y5 ]+ r        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;: g$ ?1 H, |9 I/ H0 p
        cout<<"对v1去重:";5 @: t  u) s% M9 s; W
        v1=unique_element_in_vector(v1);/ n* C4 F. K8 b( x/ A7 d0 @. H
        print_vector(v1);
- _/ ]) F9 n+ n5 O& J        cout<<endl;. E' P, `$ i4 \. v9 S5 z1 E
        cout<<"求v1与v2的交集:";( t5 S+ P5 ?: x7 z# G
        v=vectors_intersection(v1,v2);
8 A' U& j5 F3 ^  r        print_vector(v);
9 F8 K; e' E. R        cout<<endl;
  m# e/ ?7 h) W$ {+ w        cout<<"求v1与v2的并集:";: g# B6 s- D) w* u2 M' |# [
        v=vectors_set_union(v1,v2);( |% K" L8 I1 s! X" g& j
        print_vector(v);
! |+ P( Q* `, \) H0 h        return 0;
' S; l, c- `* w- v/ Y}[/mw_shl_code]. v5 w0 B5 J/ q' w1 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二次开发专题模块培训报名开始啦

    我知道了