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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
3 l/ D* J, M" v# z# I; J
" ^9 d/ Y* A; T; A: K0 W
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
( @4 W: R& D) n1 f: R& j[mw_shl_code=cpp,true]#include "iostream"
0 q" o# v! }* u+ H( {% T#include "vector" 7 @. a7 a8 [$ K* D- \
#include "algorithm" //sort函数、交并补函数/ T3 p5 o0 g; n3 h  [+ C% Y! i
#include "iterator" //求交并补使用到的迭代器
; _% x1 ]. @( |: U* \using namespace std;
+ w- t, D( K. J* _, w$ n0 u/ m2 ] 4 s4 ?" Y+ A: {( _+ n1 O
//打印容器vector
$ g" s/ C2 n- R7 Y, Evoid print_vector(vector<int> v){
. B$ f1 N8 L3 f0 J7 l6 a, J        if(v.size()>0){
$ p5 K# ]8 ]! Q/ g9 Y                cout<<"{";  : r& O5 o) o( v  M: ?" n4 I$ F
                for(int i=0;i<int(v.size());i++){  9 J' B' f3 q/ @  K6 T% K- I/ C
                        cout<<v<<",";  % j7 G3 A+ R+ n. }
                }    P8 R$ `* ^  J2 t: W2 l
                cout<<"\b}";  * w9 ?! h/ y' k" \' \
        }
" t% `" k  W" Q9 Q6 e5 ?        else{9 E  b! q+ V1 ^7 z
                cout<<"{}";
! @  q4 k; C9 Z3 ?) \& G8 @" t. Y$ ?        }2 J: K( w. F3 {$ ^% t- f* b
}- P1 A$ U/ Q9 L2 @' F
4 E6 x4 X6 L& k' c. R% W' A" O
//容器vector中元素的去重& p5 c* a9 \( I: R; ~/ F8 K
vector<int> unique_element_in_vector(vector<int> v){; m) {, I, n4 N* {( ^) g
        vector<int>::iterator vector_iterator;/ D7 z$ N0 A2 C4 t- d% ]' c
        sort(v.begin(),v.end());9 T% t6 y/ j3 T9 i4 ?1 f' x
        vector_iterator = unique(v.begin(),v.end());# N% E9 z1 b3 J0 l
        if(vector_iterator != v.end()){
" ~' n* y- ~& p" x$ k, {5 G                v.erase(vector_iterator,v.end());+ V2 U7 A" X$ \  m& M7 ?' t) O4 N
        }/ m, l7 [9 F5 k+ W% Y: D7 X! E
        return v;( u- O) n+ a8 R, b# C& B4 q9 b/ A
}
% S  @, a6 f$ h: c3 U! _6 w7 l
  o$ l& ~: r) V# F. [//两个vector求交集
- a' M" H3 f' n0 f: P  S! I+ F$ Jvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
, ]) _9 M- e$ g        vector<int> v;
* v: b/ P6 C( u. G# a  h        sort(v1.begin(),v1.end());   / a5 r9 E: j2 @% v) I( |
        sort(v2.begin(),v2.end());   
2 H: f3 m( {+ b7 J9 A* H6 n        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
& x- x" A) J4 }        return v;
* {1 z6 i4 u6 f! |( A: X) f; k% i}" n. Q# d5 `0 B6 q! \
' _/ x  h' y' O
//两个vector求并集
  K+ W# S3 f6 |% u3 F  Bvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( J9 d; a. W1 G# B/ Q! b1 J' ]: E        vector<int> v;
  X" R1 @. q& `  |$ r4 S/ H% V5 E3 B! Z        sort(v1.begin(),v1.end());   
# U5 q( g( I4 [, u        sort(v2.begin(),v2.end());   
2 a; C6 D- L; d7 `5 z  Q4 k' W        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
$ y' ?% c  ?! ^% N2 U; @4 V2 U        return v;, }$ b1 c/ O7 l6 B  s! j* O
}. x: Z" I- V' y, o
5 {1 G, h+ U* `( b% p
//判断vector的某一元素是否存在# o* l# Q! X  m
bool is_element_in_vector(vector<int> v,int element){2 \0 ~! j) b+ o# R! ?8 _  `
        vector<int>::iterator it;; s' a0 @& e/ u5 M% ~5 e. J, q
        it=find(v.begin(),v.end(),element);  h0 Y& \& x# K" x
        if (it!=v.end()){
0 W6 ]5 ?3 ?9 t9 k2 k. \& _% ~                return true;1 Z& o) d5 I8 v  S7 P4 c
        }4 }. ?' ~; ?5 R/ c5 G$ O5 A; `
        else{, U9 G' q2 d4 L- v2 R6 i4 A
                return false;$ c4 X' E0 e: \1 C6 l' D$ ?. L; Q
        }
4 H6 e. R  Y5 z9 q}  C1 U" C) S; j1 O' Z' h! r

" e6 J% N6 A3 d! a, `9 x2 z% Yint main(){2 s# @; C  ^* G. b
        vector<int> v1,v2,v;) U8 s/ y0 J4 \1 e3 d: R
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
' j" q; a2 C6 s6 Z# _- B: [        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;: q, ~0 I+ L' {6 C: c1 ~; ~
        cout<<"对v1去重:";
( A/ a( H5 Y1 p        v1=unique_element_in_vector(v1);8 S5 o7 X8 s+ v8 e) Y3 I4 m
        print_vector(v1);
- r0 [( |7 c! n2 `2 |6 Z        cout<<endl;8 J  j: @5 n7 [5 R* ?# B4 e
        cout<<"求v1与v2的交集:";. h2 P, `# A- S. P/ B
        v=vectors_intersection(v1,v2);/ w0 j- G( y& D* G
        print_vector(v);3 Q5 [8 X  W% ~
        cout<<endl;
( p( P; a" E: S" @3 z; Y, j$ \        cout<<"求v1与v2的并集:";" U2 A7 V& D6 y" d& x
        v=vectors_set_union(v1,v2);
, X  T) B9 T: e  h2 U        print_vector(v);
9 u3 J1 c& I; Q0 v        return 0;
2 a. C; f# ^" Q2 B% b" A}[/mw_shl_code]
: J* Q. n/ t# @
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了