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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
% |" y5 B0 v0 @. _( u, u
3 Z9 T& p$ p" l; T! Y% ]/ R) \) o
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
- e8 d% ?' E0 U- O  f$ s$ v# X  d[mw_shl_code=cpp,true]#include "iostream") }1 k  y/ O$ L" X
#include "vector" 4 q& m$ N6 ^& W5 h
#include "algorithm" //sort函数、交并补函数" y9 X* h* p9 N6 Z; n5 J8 Y  P
#include "iterator" //求交并补使用到的迭代器
* M/ J6 R0 x! Q# b# ~" R8 M+ F9 fusing namespace std;
+ Y8 I9 u; u8 g1 O* [# w
  z8 _" T6 h+ w//打印容器vector
8 n4 ]; k% s# }6 A  i4 f! Rvoid print_vector(vector<int> v){
( U6 Z) C/ N" _        if(v.size()>0){6 C/ K8 F( o, `2 [
                cout<<"{";  
( H8 Z8 ~( t9 S9 e                for(int i=0;i<int(v.size());i++){  4 q: h+ |' c8 D; `7 q
                        cout<<v<<",";  5 T9 ?1 c' n/ S" U9 @
                }  . V0 a  l% d  b* H8 Z. S
                cout<<"\b}";  
9 x, E9 y) e  ~. W- o, \2 i! @; m        }2 h8 Z! t+ ]5 E
        else{" a- M0 F$ v0 t  C  r
                cout<<"{}";
% G! {7 ^& U8 m: F9 s: P$ ~        }8 y5 ^1 o0 r8 w3 |% I$ o
}6 B7 |/ x" q7 D: c/ i5 Y

7 d2 o) y6 |" l$ B* D/ S//容器vector中元素的去重
2 R: [0 Y! Y. \  W5 |" V  hvector<int> unique_element_in_vector(vector<int> v){8 |$ G, q& L2 ]2 O7 j
        vector<int>::iterator vector_iterator;
9 }: q- _! @$ }' {5 C        sort(v.begin(),v.end());
" d7 M1 [: i  C        vector_iterator = unique(v.begin(),v.end());
4 Z' C# x" S# a0 ^        if(vector_iterator != v.end()){
3 \# Y$ x9 D' ~4 ?5 Y                v.erase(vector_iterator,v.end());
& d" _) A( J- ~3 U' V5 P2 C        }
0 {8 a2 i+ a1 _/ I        return v;
, w. e: g# r7 Z# a) g& D}. f* t1 b2 d& ?+ }4 H3 M

2 ^" Q7 b+ M& I' C/ H//两个vector求交集
0 b( [+ @( d9 A0 j% X6 \vector<int> vectors_intersection(vector<int> v1,vector<int> v2){. t& S; m1 l5 j
        vector<int> v;
1 T- ~/ U8 \' C- J! m        sort(v1.begin(),v1.end());   
; v0 q- K, y+ I4 J        sort(v2.begin(),v2.end());   
  b" O6 I+ N: e# y6 F        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 , |' \8 C- y2 }' }, Z* L
        return v;5 v" \  _/ `, M, w/ V
}
& n: e/ j. G. W5 t3 H 1 p, X, M9 T7 U6 _3 a1 L3 _9 P9 G
//两个vector求并集, I: ?( I' e- |$ J. i3 e8 U/ K, `
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){+ T/ n6 E- Q" y! x3 m* I6 T
        vector<int> v;
+ T! L* i' K) n        sort(v1.begin(),v1.end());   $ p0 A: u+ C5 D/ K9 M0 M8 n" t$ ^
        sort(v2.begin(),v2.end());     ?  j/ m  }# T4 u1 n1 S$ ~& P; q
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
5 t+ x" G( @/ i        return v;9 r0 d0 _" {+ S5 ?
}2 ^+ Q& L6 `& J6 J
! \  f! Y% h5 l4 @5 u0 ^. \/ Z; W9 o
//判断vector的某一元素是否存在" ?& k3 q8 \& g5 E& K0 {! J! m
bool is_element_in_vector(vector<int> v,int element){
3 v; G, |0 ], ]$ N( G. n* ^' B        vector<int>::iterator it;0 P. h! C1 s) Q
        it=find(v.begin(),v.end(),element);
9 o6 z' }0 Q+ c8 X* R5 p3 W        if (it!=v.end()){
3 o$ q# \% S$ u" K! ]. y" P                return true;1 S; t# F; s3 l0 s! x
        }3 d2 X8 j& W* v: S- A& E
        else{
; Y3 N0 M! C: m# E                return false;
% n  H: d: Z, n1 {, o* z        }
- }: O: O5 c& D}  y; f* D3 w8 E9 g& `/ h4 S$ p
/ ~3 G: `) o# R& Q
int main(){7 {, y* ~' Z0 t1 m" N& T5 e
        vector<int> v1,v2,v;
2 {9 c6 ^9 i  `* q3 o+ w& Q        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
2 B0 _6 x  Y( i- o0 i        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
( ?1 o# h0 p8 ]9 ^/ E# l) w        cout<<"对v1去重:";
; Z2 L4 @# `- f0 c( Y; T        v1=unique_element_in_vector(v1);
4 G' w4 \. U9 Q; y9 H        print_vector(v1);
0 z) t3 p1 \# l) L, W        cout<<endl;
. K9 Q9 h4 w1 t. w  `* _, ]! p        cout<<"求v1与v2的交集:";
; T" p# }0 b: m  C; e        v=vectors_intersection(v1,v2);
. J  Y# u4 y+ |' d2 @. E9 C        print_vector(v);
% z3 B# g' b# C1 K7 }* \. H" x        cout<<endl;
4 d0 j# k1 z/ G' E$ h$ R  e; K( {        cout<<"求v1与v2的并集:";% ~; z" n5 W5 _5 j! n
        v=vectors_set_union(v1,v2);
2 n8 @$ z# l( i: k$ W4 E7 r- {. H( D        print_vector(v);
# p* t: ~4 Y5 p% [; D: q$ z% \        return 0;- r6 _* n, y0 k
}[/mw_shl_code]7 s7 v( w1 l5 ~1 E& o$ U2 t; G' z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了