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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
1 k1 Y5 O& T4 ]7 K: g5 A

; F9 h; p% I% E( mC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
0 D- v0 q+ m' P  X" x  `. b. c[mw_shl_code=cpp,true]#include "iostream"
# Y# W# f* @4 z+ M" h$ D#include "vector" 0 T1 j9 e. ~+ ?; f1 U% {, P% D
#include "algorithm" //sort函数、交并补函数
& i: p6 i: z: E1 B1 b+ c1 f8 q#include "iterator" //求交并补使用到的迭代器
$ U+ ^3 ^( u  musing namespace std;
: i! M! k( s' p
. k" R- a/ ^: @//打印容器vector6 U1 |  \8 a) B0 M! P
void print_vector(vector<int> v){7 o6 G2 Q: N' H  F( ~. u0 s
        if(v.size()>0){5 \1 q4 {2 ~" _
                cout<<"{";  
6 P1 o/ ~" n# R( j3 H; u% q                for(int i=0;i<int(v.size());i++){  ( X) l1 B, G4 F( K6 ~% U
                        cout<<v<<",";  
& X0 G6 q; r9 Z                }  7 A  Q7 b- C" `- I) q( r$ d; x: W
                cout<<"\b}";  ' [& q* E, y3 L' {4 U, H) O
        }- m, s8 \* O# c: O$ l
        else{
, T4 m1 @2 f% W& V$ O: O                cout<<"{}";% B: Z+ s# T% i, z7 Z5 j$ d+ o
        }
# X' k+ H/ w1 W1 c}% `6 o# v1 t1 M% f
4 Y1 N0 e: A0 ~
//容器vector中元素的去重  Y- ~; J5 Q+ B, r# h0 ?& n
vector<int> unique_element_in_vector(vector<int> v){
2 L+ n  z. U; D. N$ r$ D! o' o        vector<int>::iterator vector_iterator;  |# m/ e5 u& o4 @
        sort(v.begin(),v.end());9 [( j8 `9 ^! @$ {, _, S7 b
        vector_iterator = unique(v.begin(),v.end());4 W$ ^& x. s) k5 c; x
        if(vector_iterator != v.end()){1 O' z3 e- m  Q! S" n' |1 z9 A
                v.erase(vector_iterator,v.end());) N0 v' u4 s$ h2 D8 U- q
        }6 a/ G" M* k! k) c1 ]0 M, U
        return v;2 A& A/ T9 M/ P& Q& F
}$ Z! S! L# z: F. T% V' c
2 E  R$ {# K' B  Z  |
//两个vector求交集
0 {4 q/ |" C1 j; \0 a- pvector<int> vectors_intersection(vector<int> v1,vector<int> v2){2 S4 q# R# b! b' Z
        vector<int> v;
- X) h: X) ]9 p. |) N- o        sort(v1.begin(),v1.end());   
! j/ [6 e5 m. w: ?. j        sort(v2.begin(),v2.end());   2 T1 }. a/ y* @) @# N
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 # [3 A% T) Y3 I% W1 n1 c
        return v;
. `2 S9 a+ H* q8 h0 O9 V}
& N5 V6 Y2 F- b3 ]" \" g6 E. r! Q+ x 2 W6 y8 s) E7 \4 j$ u7 ]
//两个vector求并集4 a% M# b. D' i1 `, B" z6 {
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
5 ]& I) x; y7 f) \- _" S$ \        vector<int> v;+ p& j8 h5 u* c% Q! [
        sort(v1.begin(),v1.end());   
  {8 W* v1 }+ U0 R        sort(v2.begin(),v2.end());   
, D3 Y. H( V/ h/ M( [) R2 G- I) G" p        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 2 ]" {  _- c" D' }- Y, L$ s2 y/ G
        return v;- e# X% q" w9 \
}) T! K# |( w' a# |9 o
  S) V( m% D2 ~& i1 y3 K/ q: j
//判断vector的某一元素是否存在; h- n$ ?1 T7 Q- l0 N
bool is_element_in_vector(vector<int> v,int element){+ q( w$ a: H: f$ M
        vector<int>::iterator it;/ ~+ Q+ P1 Z) r8 e
        it=find(v.begin(),v.end(),element);' {0 ~# i; b, W/ E5 D1 L) B
        if (it!=v.end()){9 Y- N9 w# m9 S- [/ _
                return true;( g/ L: c/ |* ^8 n1 J/ Y
        }  T' X1 m! S% [5 X& `) g
        else{) S! J; ]9 l  _4 j
                return false;9 L3 x7 g/ _1 U( Z* a" T
        }
1 \) @3 M7 r; y# M8 Z6 \9 R}
. m* Q: d8 e# t* v/ @ * p$ c, t0 N8 I
int main(){
( R! t6 g# ]( n! z, B        vector<int> v1,v2,v;# I3 T' q" C6 T! |4 Y
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
3 x; N* y; {9 D) S; P, A        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
# A) j3 I  {4 ?        cout<<"对v1去重:";5 h( v2 S" F/ B; w
        v1=unique_element_in_vector(v1);1 J; \5 C1 F3 s+ V' Q1 Y
        print_vector(v1);
8 r& V& E, W* d. N7 P        cout<<endl;9 F6 e# o! v" Q# W( G$ j* y, \
        cout<<"求v1与v2的交集:";- _1 r- ~/ ^$ h% s$ a/ X. m
        v=vectors_intersection(v1,v2);
- z( F( Y" e# o- r. H        print_vector(v);7 d/ ?/ T* J9 X( C' b7 W5 l
        cout<<endl;) f" I. J8 [8 @
        cout<<"求v1与v2的并集:";9 q6 t/ L/ m2 W; `
        v=vectors_set_union(v1,v2);$ ?* F% N7 T* X* i( b( m$ d
        print_vector(v);
4 e5 P+ A$ H5 H; c$ @7 N0 e$ {        return 0;
/ G' I6 x4 M* [}[/mw_shl_code]
# t3 J+ o. C2 R  _+ P' n
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了