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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

) L1 m+ E6 n) R
& N- M: y  {5 w6 T" I! h1 gC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
4 J4 u( i4 X# I+ Q9 s8 e[mw_shl_code=cpp,true]#include "iostream"( \, i5 b! R; X- ?
#include "vector"
  ^1 D& i" o9 P% w  \* R1 C! k#include "algorithm" //sort函数、交并补函数
+ v$ R4 m/ W* o  ]& m" y! y; r/ P% `#include "iterator" //求交并补使用到的迭代器
% M' j4 r8 ?( r( O/ h* eusing namespace std;
2 N* {2 k) l7 E7 Q- ?
# Q! j3 _* N5 s' B& @% p- S//打印容器vector
# k4 N$ K3 A. K9 rvoid print_vector(vector<int> v){
) }* ^# L; _9 a# R        if(v.size()>0){0 p# B4 V! B) k1 L* o% P3 {
                cout<<"{";  $ P' R2 v0 `) \9 M3 P
                for(int i=0;i<int(v.size());i++){  ) N! @) y) K6 ^  X. Z3 E
                        cout<<v<<",";  
2 Y8 Y7 l  t% k                }  3 b) G/ E" o1 n% E) C
                cout<<"\b}";  
- C) g  v2 O! j/ i- r" ^! k) v) I        }
7 t6 a  S3 V9 w        else{7 W' Z$ o- Y# y
                cout<<"{}";% d; X- }* A9 o9 l7 }4 t$ d8 r
        }6 }& |% F3 p; \# I$ y1 Y8 D
}
$ R* b8 F) z: w4 d5 L9 x4 A( |/ j
. K6 T( y$ z3 K5 A" x9 M//容器vector中元素的去重
% O% N. j$ N: ?, W1 ]& |vector<int> unique_element_in_vector(vector<int> v){) Z2 E9 o5 O) G5 s! N/ i9 X
        vector<int>::iterator vector_iterator;
9 ^% l$ @. p; s5 M- b2 L3 G) U        sort(v.begin(),v.end());
1 F1 e; @5 T  ?        vector_iterator = unique(v.begin(),v.end());+ f/ f  i4 g# |' B9 p2 [& G) a3 \0 f
        if(vector_iterator != v.end()){
# I/ X9 N* e3 H  c4 C                v.erase(vector_iterator,v.end());
: X/ v; `$ H' u" i2 E        }
: e9 k% r/ F2 R* B7 I2 C+ v& D+ Z        return v;
# N5 [( n  j+ ~$ w4 k}- J1 `( S$ a& m: z# j
. J! [1 I0 N- b2 d$ ?* Y+ _/ \8 S  c
//两个vector求交集
2 E% _8 }, i$ k0 y# Hvector<int> vectors_intersection(vector<int> v1,vector<int> v2){) B. |( v; ^$ h- x9 B$ q8 f
        vector<int> v;
' Z1 ^6 O+ `/ g; G9 H. _! n7 {: e5 f        sort(v1.begin(),v1.end());   
4 Z2 A" h  C9 U- [: G: h        sort(v2.begin(),v2.end());   * I$ Z5 u. u0 w$ D2 Y: h8 \- {4 K( i/ b- N
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- T* v& ~4 B2 i% V, t        return v;
8 z- o, L4 v2 m4 t1 f) p6 w! m( T. Z}
2 M( k) g: Y* O+ _ . M+ w, Q! l. b9 v
//两个vector求并集8 k2 S6 h! O! x! s& i
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# ?! G; v9 C+ n$ I# [, j        vector<int> v;2 f( z; O, E3 Z+ w
        sort(v1.begin(),v1.end());   6 h) g, S+ w9 D$ R- S) g! d
        sort(v2.begin(),v2.end());   4 O( u( E" j# ^; B0 Y9 k" _
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
5 c; {8 _: Y" O" M! T  [! v1 n        return v;
9 ^2 P: `+ O: B. H}
/ L5 x& n8 ^0 c
2 I, F. K; _4 j5 n0 C1 Q1 O//判断vector的某一元素是否存在  v% j# }* }5 T" ^
bool is_element_in_vector(vector<int> v,int element){; U6 [# J+ L; R9 O. g; s- Q' z9 P
        vector<int>::iterator it;
+ Y( v6 n* I: J) |4 Q) Q        it=find(v.begin(),v.end(),element);
& v! \9 f# i6 G0 B- V0 Q. X, ?0 H0 E" n        if (it!=v.end()){
& n* L! T9 y! W- `) S                return true;6 F& \, C1 J3 X! Z/ G. F4 q  W
        }
! k- s( P% b8 G) n1 J+ I        else{9 R6 c0 X5 @. `+ ]6 u6 F% Y5 n
                return false;
( ]8 q1 L. g( }( o+ {) ^1 L; E        }
5 a2 O9 x( o+ i% U}
3 Q. _0 K+ [# [$ d. M2 X" S
" G) k9 I# j/ O8 zint main(){& @, g- i0 K" h* a; H
        vector<int> v1,v2,v;$ T2 v% A  e% i0 V
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
2 q0 e8 s6 l7 d/ P: P0 O        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
* [% h6 ~0 S# G: t$ l' Q4 A# o        cout<<"对v1去重:";0 h, k8 p3 ?# O, G4 i* A
        v1=unique_element_in_vector(v1);
/ P* |# O' @) [! v: U        print_vector(v1);
4 M  C7 @4 \; {# o3 ~        cout<<endl;
7 B! L5 a* r+ {/ V: H+ X        cout<<"求v1与v2的交集:";) A$ F) _) Y. A, U/ E" Q* B
        v=vectors_intersection(v1,v2);% _2 q/ k- ^- n0 i1 I( }; G
        print_vector(v);' \5 W4 S/ h0 v3 ~+ a% J
        cout<<endl;! c5 Q' n/ [$ I. `: _
        cout<<"求v1与v2的并集:";% a: v9 E% T7 h- J  f8 P$ o
        v=vectors_set_union(v1,v2);/ w+ s) e: y' x
        print_vector(v);
5 {  e( R: K) B% o& I% p, B        return 0;
: N  z5 @% |7 a& v! a7 `/ {# J! a; _}[/mw_shl_code]% W) q: _! B+ V  o
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了