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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
6 I  s; s2 r/ ?

0 x1 `  P! ?6 H& C5 L/ JC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
5 ?+ r1 U7 p* k4 L, E  l5 I* J[mw_shl_code=cpp,true]#include "iostream"1 p- L, ?& e: ]1 Z% m6 r
#include "vector"
' y: W  n/ G+ a6 ~; f( {#include "algorithm" //sort函数、交并补函数
. o# Q. O6 ?- u, d" f* C  I#include "iterator" //求交并补使用到的迭代器& p( G; S7 p( u( o0 O+ t' Z
using namespace std;
" M3 N8 c6 J+ X* ^ : F, [4 @4 k) }; v
//打印容器vector
7 b5 r7 g7 n/ e) b- A: Svoid print_vector(vector<int> v){
' _  x/ ~, E* M" D" q! j        if(v.size()>0){
1 J. g4 h( k4 u  A0 h                cout<<"{";  
6 ~# R: \% }- g0 P; L7 }7 K; w! h                for(int i=0;i<int(v.size());i++){  ; H  m" g& @; Q, T2 H' L
                        cout<<v<<",";  7 r0 y1 `- j6 Z! U9 x
                }  9 u3 z( D! s) ~0 l! z
                cout<<"\b}";  , x0 t2 J/ I/ X/ x9 D3 o6 O2 _+ R
        }
6 r; z' r+ M0 |; M& p2 R2 Y        else{- v  I: X1 l$ ^  _! ~) g( P
                cout<<"{}";0 X/ I9 Q' T( f  V" |+ v" g
        }
- S/ i) G- O2 [. |2 h  ^}
6 \$ O: U( T2 Q" J " N( M5 ?8 B$ _
//容器vector中元素的去重& w' B. C# x  P; T2 F
vector<int> unique_element_in_vector(vector<int> v){0 c4 Y  i2 C6 O
        vector<int>::iterator vector_iterator;
  ^, L0 e. I( G* \        sort(v.begin(),v.end());, H9 ^6 v4 `( F+ @
        vector_iterator = unique(v.begin(),v.end());$ F- }4 m. m$ y9 l/ K. c& H# W: f
        if(vector_iterator != v.end()){
8 L$ o  a- L% E. n9 _; W                v.erase(vector_iterator,v.end());
1 O5 `( H, l* X2 U8 F2 H        }8 Q; ^$ H, K5 _5 i
        return v;
: A/ z6 {$ X( Z}' n0 j* ~3 }/ [' H

# U6 p% T! s4 p) }4 C//两个vector求交集
4 C' P5 F" T3 J4 X# Qvector<int> vectors_intersection(vector<int> v1,vector<int> v2){/ \+ D  y! u1 Q1 O9 r0 P$ F
        vector<int> v;
/ b! N! {2 h1 t9 T5 a3 m        sort(v1.begin(),v1.end());   
3 i4 A8 ]* o# E1 C0 Z        sort(v2.begin(),v2.end());   7 I( L3 P/ }& W; _/ o7 G/ A. H
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 # |6 f/ w$ J& `. ]2 w
        return v;* E5 C5 t" P. h2 w, l
}5 ^+ f* j( A% j! \4 B# G
4 h4 t; p! c. U2 V
//两个vector求并集
4 |" ?" [) g$ r/ L. Zvector<int> vectors_set_union(vector<int> v1,vector<int> v2){; Q" O( Y; p' f9 K, d: e
        vector<int> v;
8 E! v9 K: e: _* Y2 L        sort(v1.begin(),v1.end());     P7 i# f! n/ g% s: B2 Y* D# ?
        sort(v2.begin(),v2.end());   
1 P0 g0 {, ?, h# i        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 0 D6 q" O3 Z% C
        return v;8 j5 `$ Z- v9 [
}2 O; D; B. W1 Q7 A, m' Y% q# i

  q& N. ^! P& j3 {//判断vector的某一元素是否存在
2 o9 X+ b2 a  V. q; ybool is_element_in_vector(vector<int> v,int element){# d# v' }2 `. v# K& g: y) S
        vector<int>::iterator it;6 u  |: {& o! t) E4 R: h  p
        it=find(v.begin(),v.end(),element);
* @* R3 T5 E+ S- O        if (it!=v.end()){
6 H  g: h9 c- s$ o. x, A- A, s                return true;
+ C. A. Z; Z# M* T        }  t" e3 b4 N- |' Y$ B% |7 }
        else{
. C2 ?/ k- d  q# Q% i                return false;# T) c( W4 H" A3 V
        }
; a. d' J$ |" {}) B4 h7 t6 S  `% Y# U; S

- ~  Y4 M+ o, O; O; zint main(){0 P$ Y# p' e# b! |! o& b. X' t
        vector<int> v1,v2,v;5 g: z# ?3 Q) D' V
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);* @- i2 q1 P& X) P( O/ z6 N
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;: R5 D) M5 O. w& g; Z
        cout<<"对v1去重:";
1 A& }8 J/ O4 V! ]6 l3 v( z        v1=unique_element_in_vector(v1);
1 e0 J1 A5 N& p5 y4 W        print_vector(v1);
! l" A6 a* {$ o7 U        cout<<endl;7 E. f! Y+ l0 i% ~+ `8 ]
        cout<<"求v1与v2的交集:";
+ O# r& W. F, y) e# b3 j* {6 [- a, e* @        v=vectors_intersection(v1,v2);
4 b) ^, w. g2 U) H: e        print_vector(v);
* z4 `- J- R! V: K! \* C' `& [9 M        cout<<endl;
' ^) J0 F1 s+ W2 i/ i: J        cout<<"求v1与v2的并集:";' x  D7 h0 T& ?4 z& ]/ {
        v=vectors_set_union(v1,v2);  u  A! B( n' k0 h3 ]
        print_vector(v);4 ~$ l! [5 f7 A- z0 x
        return 0;
9 G& @% t9 O% {1 D  @0 z% S5 t+ a}[/mw_shl_code]8 ?/ O. F1 R. S% O
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了