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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
8 u! ~- M* U' Y- |  @5 s$ ?
2 `% @' @9 g/ `9 R" X4 o
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
  Q) Q1 r( e5 P4 _& h9 ?. m[mw_shl_code=cpp,true]#include "iostream"
0 g& @$ M% i( e- W#include "vector" & Y! o% a, F( o% m' E
#include "algorithm" //sort函数、交并补函数
- h0 \) t# H& L  U#include "iterator" //求交并补使用到的迭代器$ P& t! r% G6 ^5 }$ H
using namespace std;$ ^. q- C# @+ @9 a6 A: [8 T) O
5 R) `" z# ^" S! o9 i
//打印容器vector
1 g+ e$ P4 b3 b/ P/ _void print_vector(vector<int> v){
% Z  @0 j" ?2 r& P, d        if(v.size()>0){! H$ q  U+ t( |) C" c
                cout<<"{";  / T" y4 B0 I9 I& i
                for(int i=0;i<int(v.size());i++){  
4 p4 C) A- f+ A2 E                        cout<<v<<",";  9 [) q. r0 d: S- _% B( D& `, ~
                }  1 Y5 s; Y1 ~0 u% F% p5 M
                cout<<"\b}";  
. ^& w' c& ~( D: e4 f, ^6 z        }9 Q4 @4 d7 D5 U2 U
        else{7 C) a4 D+ a, ^
                cout<<"{}";' W4 c" y& U! R& E/ ^) ]
        }8 K! Z; ]6 X6 j# \
}9 F0 w$ B) j0 t+ i2 F$ p
  S& h4 |% n( v+ ^; L. u1 f
//容器vector中元素的去重
& I3 w( |, S4 v$ t3 K5 y6 @vector<int> unique_element_in_vector(vector<int> v){
, I7 h# ^' M' ^* u( L        vector<int>::iterator vector_iterator;
/ [  l4 |/ v* g4 y0 R/ D5 e8 c) w        sort(v.begin(),v.end());
' D7 l/ z$ S* {; k: B8 E        vector_iterator = unique(v.begin(),v.end());
, y; F! E9 F$ x8 ~        if(vector_iterator != v.end()){. _& z) N! t0 r; u( a# L
                v.erase(vector_iterator,v.end());1 N8 o1 ^& |  A& w
        }
; [' M8 k7 Q: j! F        return v;; I, Z4 n1 n& R" P
}
' H9 w0 T6 f4 i9 u
. D3 p2 i! K* i: z7 a" Q5 P//两个vector求交集
% `9 a1 E8 v2 j- \9 t1 O- V$ qvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
6 G1 T: e# n: S, q* F. T        vector<int> v;
/ @5 l& Y$ x1 z. ~        sort(v1.begin(),v1.end());   
# B6 ?% E2 ]( k        sort(v2.begin(),v2.end());   
  y/ S; y  j7 W- G        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 0 B( o- q/ u6 t
        return v;' z) |4 Z, j1 z( x& s
}
6 f/ u4 Z9 \$ ]) X/ X
6 ]9 g( o5 {9 D& `6 M% q) s* G//两个vector求并集: P1 j2 N4 T% a7 T  d. a
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
1 @/ Z  r4 ^9 g. w# F4 G        vector<int> v;
+ u* c+ e% d; H9 s        sort(v1.begin(),v1.end());   
" N( v- P* Y& L        sort(v2.begin(),v2.end());   
/ Z# R5 i. `7 s( |* C3 s        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 - K; C9 |  F4 U6 |. S. \
        return v;. ]& [  H. N% H+ @" H8 \/ Q5 O
}
# @4 r: @7 w1 c6 ]: h( V
, `3 E* I& t( S# E; ~0 j$ H//判断vector的某一元素是否存在
6 f  U- b& S$ Z+ G9 k! qbool is_element_in_vector(vector<int> v,int element){
$ f) ]3 L8 Z% p5 S        vector<int>::iterator it;0 O8 j+ ?( r  ^" m2 {
        it=find(v.begin(),v.end(),element);
( j  ]" r( W: Z, J* Z' |4 }        if (it!=v.end()){
4 A+ I- D2 R7 h+ {" r+ C/ F                return true;3 f2 Z# H4 |) L) B
        }
- D8 f' q# e1 u. e9 o        else{
8 x( H$ A  y3 i! Y0 @9 v# h. @; l                return false;
6 Y: o1 {% O; E1 ^4 x5 d- `        }2 B% i% V3 n- s$ O$ h" h& ^
}
' P6 o9 }& {7 o4 d$ j 9 n' |4 c- o0 l8 M$ o  Z
int main(){8 h/ N$ h: P0 _+ @) l. q
        vector<int> v1,v2,v;  T! J- p4 h. q, ?9 R
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
; M2 D  d' d9 V2 \        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
$ c. p9 g. W8 d+ U$ Y1 \! u        cout<<"对v1去重:";
, e+ Q" V& w; }; }" g7 v+ b$ c        v1=unique_element_in_vector(v1);+ p: J3 `5 P5 P* C. f" e
        print_vector(v1);" |& _+ E+ m2 j7 @( L0 Y5 b
        cout<<endl;
* _+ m, }* ?; D2 M        cout<<"求v1与v2的交集:";
( p3 l  X& W1 N8 r" A% j        v=vectors_intersection(v1,v2);6 p3 ~) K  H, F7 T6 i& P( T
        print_vector(v);
1 j/ ]" Z6 N* a; \        cout<<endl;
8 p# e' Y/ S; }* [$ h0 ^' g        cout<<"求v1与v2的并集:";) d% _' w# Y% p3 l, _
        v=vectors_set_union(v1,v2);
$ w. T* k% j; P# u) n" \        print_vector(v);% ^. E) }% ^' R2 B' ]9 ~
        return 0;
; [, b, ~1 Y  A% ~" C}[/mw_shl_code]
! H6 C! p' A/ W' O' R; I/ ?' m
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了