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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

: E$ u! n+ ]8 b
* q6 r" @) E$ LC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:- ?% D4 V! Y' _7 @
[mw_shl_code=cpp,true]#include "iostream"
0 K3 E) M; i: g  d5 j: T! D#include "vector" ' f" n' K; t0 L- g) i, m1 O
#include "algorithm" //sort函数、交并补函数
4 E' |* p, y9 p+ }* s#include "iterator" //求交并补使用到的迭代器. n* I' }) ^9 q* }4 ^% }+ i
using namespace std;
$ v# c/ p1 ~) p/ X
1 k! C! h# K2 s- i//打印容器vector
" K% W% U. B- M# I* avoid print_vector(vector<int> v){
* {* C* Y# D( j$ x0 P        if(v.size()>0){, k  u! O8 |& w# h4 f8 y  C- k
                cout<<"{";  
' K$ Z5 E: t/ ?/ V$ i# V                for(int i=0;i<int(v.size());i++){  
( s2 Y: C* Y  h$ j. ^$ G                        cout<<v<<",";  
9 I+ m! x- C( {; d3 G                }  
4 f' E* L* l: e. w                cout<<"\b}";  , g5 A* u* h0 r+ c& e& F& u7 l
        }
  @( C5 u: T  o) g! u9 G        else{
4 z+ A$ o, Q9 {% ~: D                cout<<"{}";
$ |8 v  n: D4 Q2 O1 ?6 j3 L/ s        }
! |; h9 S: v" r}
3 }4 g9 w  N8 q" z" s* T) \3 O
2 ~- `5 h$ b# u9 e0 S//容器vector中元素的去重
; m) b6 r& Z% j8 V5 Bvector<int> unique_element_in_vector(vector<int> v){. c) e" d7 Y% k; }) N
        vector<int>::iterator vector_iterator;
: {( G: O1 |: d4 h, B# V9 k$ Q        sort(v.begin(),v.end());4 z0 b+ F7 [. s& ]: c  D
        vector_iterator = unique(v.begin(),v.end());
# \. h! @5 r8 ?: s        if(vector_iterator != v.end()){
+ s$ d! T1 l/ t9 D                v.erase(vector_iterator,v.end());
8 p+ D6 t9 c( |/ Y5 e8 j        }
# G! l) o- K0 C/ R' i( W2 F        return v;
2 A0 _. D+ N+ m& Q/ h}  Q3 L5 @1 Z) f3 v

7 m1 c$ F9 t2 z5 Y- ~//两个vector求交集3 b) L+ P8 V( [
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){) G: Q! p0 e+ z/ w
        vector<int> v;
; B0 X" `4 u3 A8 R- ~        sort(v1.begin(),v1.end());   
* ?  v3 L4 W# H        sort(v2.begin(),v2.end());   
) K/ o, c$ e1 h; t% B8 U        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 + v/ Q- Z- j: H5 _: n5 \
        return v;
0 @! Q/ A8 i- T/ w}
; d7 @+ w* c% Q# D4 y# q1 f 3 [) G6 x! ]$ W
//两个vector求并集9 ^- D' P+ J5 N* D  `1 d! }8 ^
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){7 F4 V& Z$ W: f$ p( x8 F' X
        vector<int> v;
: g# R/ s" C3 g. Z        sort(v1.begin(),v1.end());   . J0 Y: s5 g' n0 m! ?
        sort(v2.begin(),v2.end());   
- T5 K/ O0 K0 ?- c! }& c        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
8 F8 p2 O  |2 L8 d        return v;' w2 O- p: r4 j9 A
}8 T! H. E) b$ F' u. ^7 Y5 n
! F2 ?: W, W% `* ?, A) ~! G
//判断vector的某一元素是否存在' a* `; ]4 B9 w) G! _
bool is_element_in_vector(vector<int> v,int element){
5 l: r( M( @0 e4 D% S        vector<int>::iterator it;) E! s8 N: t8 R
        it=find(v.begin(),v.end(),element);
- E- v& p6 T! K/ g        if (it!=v.end()){; b# j* w# Z% o8 U$ n% a  [1 |- w! m
                return true;
3 t* i# p- @8 S- v" _        }2 a  }  z, x2 K2 c" w! ~9 F
        else{5 ^4 B) y, w( n: n8 Z* b; I' A
                return false;
( Y' J5 F# S9 @  u        }* F0 x" P% k) c/ `
}$ `; l) c/ H0 k7 _

6 n1 x- j5 f) Z, t* j! ?int main(){; v% r$ z9 H) S4 G/ ?
        vector<int> v1,v2,v;) o% e! v$ G& L
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);: w* w! |" h: ~+ c2 {1 _5 R4 L
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
9 L. @+ ^7 d. c4 v* `4 n        cout<<"对v1去重:";
, p! `6 Z- Q$ y3 |) s. c5 X! O* a        v1=unique_element_in_vector(v1);6 D# [7 }- |& S9 l; L( B: k; D
        print_vector(v1);5 u( e: }. C" {+ U
        cout<<endl;
/ g% D6 j2 i" A: u4 u! }- m' \        cout<<"求v1与v2的交集:";# C) M6 N: ?1 r6 R# V" G6 @! a
        v=vectors_intersection(v1,v2);2 ~2 P  G. B# U" ^. T" |+ k
        print_vector(v);! d- a+ E2 ]& r) U) e; P8 g
        cout<<endl;
; O. f* r! `/ F' H# @0 Z        cout<<"求v1与v2的并集:";1 {  c5 w) j8 r, y( Y
        v=vectors_set_union(v1,v2);
+ u/ L2 R6 W* `7 U5 b        print_vector(v);) w3 w* {4 [- B0 }  D- g9 A
        return 0;- C- A1 J, w* @% ]2 j% J
}[/mw_shl_code]$ g9 `7 n% ?* R0 K( B7 J8 O1 i# r
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了