PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

# P3 j/ @% a) X5 x2 g* P, z# c+ }" W: |! |) P! |
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:% h$ I. C+ ~& ?) Z$ `9 S) {2 ~( T
[mw_shl_code=cpp,true]#include "iostream"1 j1 w+ f) T- u" ^. c* J3 `
#include "vector"
& z& `$ Q0 p& S% G# S#include "algorithm" //sort函数、交并补函数! T; u$ f" d4 K5 H: I8 F; d
#include "iterator" //求交并补使用到的迭代器
7 Q( w% @6 M3 r/ C8 }using namespace std;
- x) b2 A- Z1 d! ?
% H& P  K5 n4 Y4 t0 d$ E//打印容器vector
: ^+ E- H+ W) j- Q7 g* Z  rvoid print_vector(vector<int> v){! d8 M) S* p- I$ z  A0 {( H; R
        if(v.size()>0){2 E( z, r  ]# h0 f+ C7 m
                cout<<"{";  
- z3 z0 B2 Z1 F+ G+ m. @7 {                for(int i=0;i<int(v.size());i++){  1 F1 s- o" f9 O/ m7 |7 W
                        cout<<v<<",";  9 k$ N1 G& _8 H- y. r$ c( [
                }  
& @( C1 S: c) a: {# Q% d* x                cout<<"\b}";  
; z9 D: {( T4 T' u( _% E        }2 N$ M% h- h# r
        else{
6 \/ W( s+ z3 [7 @1 i" _0 V                cout<<"{}";
4 D  b6 u5 G6 Q1 T        }
, ?- w0 P  }3 f8 W}$ N" }) H; F; }6 G: `  L

" @, I" k  R$ J7 i2 X//容器vector中元素的去重) B/ K  m# l4 Y, C! p' C
vector<int> unique_element_in_vector(vector<int> v){
% {2 w! Y$ v5 ]: d4 n! D        vector<int>::iterator vector_iterator;$ c4 e& J7 ~0 N4 L) a( F5 Q
        sort(v.begin(),v.end());
& `* t' L0 q( n& Y9 o        vector_iterator = unique(v.begin(),v.end());
  ^4 |9 L3 K' ]. @4 J        if(vector_iterator != v.end()){4 T9 g& i- C/ ?  M0 B' ^) u+ ^
                v.erase(vector_iterator,v.end());
; _, H2 N- k5 B& {- F        }) K9 o% Z9 T% w+ t* A: W8 k% ^- U
        return v;% Z5 u- E" I* g" t: B: g, |0 B
}
0 O' j" o, f+ _9 Q" C# S7 } 5 X+ j8 f' T; b2 x$ U5 j
//两个vector求交集. l0 H8 A. f" r
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){6 }6 a* p: G- f% ~( {
        vector<int> v;' u/ ^5 a) `1 x4 z  J& h# f
        sort(v1.begin(),v1.end());   : l5 b# q( H/ C; _4 }
        sort(v2.begin(),v2.end());   + @6 C# n7 C- h( F4 z9 O9 i
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
; T* D* c7 [" D/ I& P        return v;
% [6 a1 o4 x! [0 M  I& k: T" @}
& u" M/ r: V: {* j
3 F0 E8 H* D8 |6 e/ j//两个vector求并集
! k% V. N# ~9 tvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
' B4 x: a& h- H. O. B2 s        vector<int> v;
% ?; j) n  m2 s7 Z% o  t+ X        sort(v1.begin(),v1.end());   ! ^5 `# d3 ~; ?' x6 V  `6 L! R. \
        sort(v2.begin(),v2.end());   1 x( _) b: m; Y4 i
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- E4 w5 C  v2 s( b        return v;
: r' m" j: h9 k/ v* V}
! D! r8 |1 g) r) ~0 A6 l( f
- H; O$ G" j) V% E" M& o% |: X, J# }//判断vector的某一元素是否存在
% |, u9 ~! S' t& Ebool is_element_in_vector(vector<int> v,int element){
3 Z% |" |1 w# R, Y8 W/ U. e        vector<int>::iterator it;
% q! U, V+ @6 \1 K5 E$ k0 m        it=find(v.begin(),v.end(),element);
& {  x. F) K/ S: c* H        if (it!=v.end()){2 ?+ x, u1 a1 Y
                return true;1 V$ }* u/ f; ^2 H" @5 v
        }
& G8 q9 P/ E% R$ x+ O        else{5 I+ F4 U3 K5 Z
                return false;
5 J* x7 v- m8 L7 m- Q        }
3 j. m# j+ @7 x, G}$ f( }( J( p7 m& P7 Q" K: A1 ]

% j& L+ F5 i0 n- E, \int main(){! G6 ^" o5 k8 V/ `2 I/ I* L# f! M
        vector<int> v1,v2,v;! D; G. e9 Z+ g& u  a8 [
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
) u% X, S" z; h, h+ o1 D        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
! w% T9 |) c: B' ^2 N        cout<<"对v1去重:";8 v5 s6 O" k) L) |  J
        v1=unique_element_in_vector(v1);
7 [7 ]1 A* ^6 X' T2 j5 P        print_vector(v1);/ t9 D: h" H5 O& [2 S5 l, K
        cout<<endl;
& S4 k* p* c" v- ]6 T        cout<<"求v1与v2的交集:";6 P' o) {, U$ v! P, u- C
        v=vectors_intersection(v1,v2);7 c) L8 Y1 H% s) j# ?! O$ u( V
        print_vector(v);: |  W6 I2 p6 M- w9 d
        cout<<endl;
9 i0 v7 c  @' d+ W4 o$ @        cout<<"求v1与v2的并集:";5 Z; U' X; S- ~( G: w; t
        v=vectors_set_union(v1,v2);  v) H3 }5 G. w* k9 C
        print_vector(v);
2 \2 V- k: ?) }' S' _        return 0;9 q6 D5 L/ b, H, B+ _, A+ ~
}[/mw_shl_code]& x" O8 D6 j0 n: G
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了