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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

% L6 w9 S6 F* {: h6 {  @" x
4 \; p) [9 A. S" g. ~C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
( N+ q9 [+ l' \, o6 G* p9 `" w[mw_shl_code=cpp,true]#include "iostream") u+ z1 _1 k! b5 \7 ]; x* e
#include "vector" 9 j. L2 @/ }  ]2 B/ n
#include "algorithm" //sort函数、交并补函数
, U! I, d: p  V7 s3 R7 ^" }! G#include "iterator" //求交并补使用到的迭代器
( n0 l' D! g8 f+ v3 @using namespace std;. ~, h9 p! @1 g0 Y

9 G5 Q8 z6 L+ R8 r1 h" k  X+ g//打印容器vector
. X& X8 e0 X9 l4 P) rvoid print_vector(vector<int> v){
+ y. d; D' M' D5 U$ E9 T        if(v.size()>0){
" m" l5 K/ g  x: U) `5 O# S                cout<<"{";  
( R) I4 G& k' \/ U8 L                for(int i=0;i<int(v.size());i++){  - h- _' i# H3 h1 b  a) o
                        cout<<v<<",";  . t' X1 I! n% A3 c! F+ r
                }  3 m4 P9 F, l+ t2 h3 z; J2 ^
                cout<<"\b}";  
% [) ?7 @, i) X; A; y2 J        }" j2 }2 m! u$ k' {3 p) R
        else{
7 {8 N/ K+ O+ I                cout<<"{}";
; f- m$ h# _6 j% b& O' T        }
8 P* }. X0 c. v: ~; v5 m}
: L/ g2 j3 B) k! K
8 R- t3 A2 s1 H1 H  m: r# ^; R//容器vector中元素的去重
4 F* |3 S6 h( kvector<int> unique_element_in_vector(vector<int> v){; i% a, m- I) F1 z3 A/ y) T
        vector<int>::iterator vector_iterator;
( Y$ t/ c: O* T* e/ l        sort(v.begin(),v.end());
/ F# r- ]4 U* t% f$ |0 O, C' P7 x& {        vector_iterator = unique(v.begin(),v.end());
; x' m. r) S: N: t/ r4 i9 t+ \  t        if(vector_iterator != v.end()){' Q$ H1 n9 _9 h9 S) V9 I
                v.erase(vector_iterator,v.end());
& i1 X, K6 ]9 J& n% T. N' ^& d        }8 F, ]6 t3 L# ]# V/ N
        return v;
- E) i8 f# b  w$ i* g8 K9 M$ }}
( [1 U0 B8 Y/ c% u/ Z% q+ z$ C2 z3 M+ x 5 k7 ?( f0 X  ]3 M" o1 S
//两个vector求交集
  i: U6 C: x9 u9 s# d3 h8 rvector<int> vectors_intersection(vector<int> v1,vector<int> v2){7 d, e1 U9 x; O" T# F9 M* s
        vector<int> v;  L- N$ [; A( l+ y& T) }
        sort(v1.begin(),v1.end());   * \! R  J! Z% M( ]- U8 s" z
        sort(v2.begin(),v2.end());   ) N2 W. \" c/ A# X" Y
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
, L3 G) S0 }0 @6 g, g        return v;
6 a* u3 h2 i6 A( ^& ]+ N% G}
5 @* S% g4 H/ b+ F  P/ p
) v0 A1 J+ l  i2 S# t* G//两个vector求并集
  b" D. W- H2 K; ~! @: vvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
" v* h6 X' s$ A# f* R: p        vector<int> v;+ Z0 L8 }% h7 K5 F9 [3 T
        sort(v1.begin(),v1.end());   . Q, |# @% T- U" @  n7 m
        sort(v2.begin(),v2.end());   
& e' a- K" L. {- n6 N* g        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
% N0 q$ `0 ?7 k+ M: q6 K        return v;
4 B' E7 @/ ^: u}0 {1 n- a9 w) _# X3 g& E
3 W: y! S; {- I: C* c
//判断vector的某一元素是否存在3 q* E( n! u* b0 y- F$ s! q. F
bool is_element_in_vector(vector<int> v,int element){
  C; O" j( y2 h: M' g) F( Q/ {) N" @5 W        vector<int>::iterator it;5 q; T5 S, F6 S0 W
        it=find(v.begin(),v.end(),element);4 q6 \! P8 H0 e4 K
        if (it!=v.end()){. ]1 y8 [2 K0 c
                return true;' t( B- M! {7 A6 f
        }/ j" \" c, v6 V; |) X
        else{
# ~, j* a- k7 u/ }& q' b" c! p$ V                return false;# p, f: S1 t8 y; F( ]  `; @
        }8 d* E1 c: T9 S% W# b3 B3 c
}5 a8 r2 k7 `) m. `

; F: B. R( C- l* u2 Yint main(){. p* a3 O* c3 h: V( i1 z
        vector<int> v1,v2,v;) K1 p5 {: o3 h" w
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);: {8 c- M0 d/ C6 `0 B
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;+ c# D: ~/ X- D6 ^
        cout<<"对v1去重:";  x2 L- |+ n$ g. {
        v1=unique_element_in_vector(v1);
& A2 \1 u( R# [8 U) y$ J1 D        print_vector(v1);
& r; l& p4 g0 {9 @. i        cout<<endl;
2 L" _/ I1 O! j: _, j9 V% Z        cout<<"求v1与v2的交集:";! y" l; i& f" V  k, u" {. n
        v=vectors_intersection(v1,v2);
3 u: ?* p7 H) |5 ^" U9 y0 D        print_vector(v);
7 K. t+ L  T% l  V: U6 B" K3 ^2 `        cout<<endl;
1 \2 ]5 S7 B* z        cout<<"求v1与v2的并集:";' o3 ^, @4 W. B7 Z& I9 G
        v=vectors_set_union(v1,v2);/ {/ T) m4 _% L" P
        print_vector(v);
" e- Z: l5 u7 I+ K8 k( {- [, Y        return 0;! i" x/ ^9 B3 K6 O: O. t
}[/mw_shl_code]/ u& s' ~$ h0 c- S, b
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了