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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

7 J& G( k( C) E' h
3 s; m) ~& t8 k( M( {9 F) {C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
9 w& B8 f+ e  [3 ^+ l[mw_shl_code=cpp,true]#include "iostream"7 w' }; s" k9 m  k  u/ D
#include "vector" 6 [2 e9 {" y8 u: d0 S: C- `
#include "algorithm" //sort函数、交并补函数
- I4 w1 s, P/ ]" A#include "iterator" //求交并补使用到的迭代器, i4 R# `; P- U  L! f" N: X9 Z
using namespace std;
/ N4 j; b; b% l# S
) Y2 x; y; m8 Z6 o) ]( G/ Y//打印容器vector& C9 T. |; k$ q
void print_vector(vector<int> v){
, o, x; R  S7 O) Q& b        if(v.size()>0){5 D5 ]/ q# A) X( y5 V( E6 x  U
                cout<<"{";  4 G) B+ g- S; y% b. F
                for(int i=0;i<int(v.size());i++){  + [& S0 H; Q5 I" J5 @' p2 i- \$ B( \
                        cout<<v<<",";  
  X) _9 o$ B! P/ o  W4 D/ o                }  
8 i* g8 n7 `  F( s9 Y* {! M2 C" d  T                cout<<"\b}";  
! c* r, J: o' @+ v7 J        }) o" C+ \! n1 F, f, s7 u
        else{% ]. i& `& F% p4 |7 W  @- p
                cout<<"{}";
0 h% M  q) D) s% ^; o/ U        }
2 N1 @- d( f+ E) c# `) k}
. v8 ~. h  R+ O+ v. f
( [7 w; ?7 W8 i  |1 m$ n//容器vector中元素的去重6 q, u- _" e+ S. N1 F3 _! M5 ~
vector<int> unique_element_in_vector(vector<int> v){+ [% s3 k' ]& M0 ]1 O
        vector<int>::iterator vector_iterator;6 P6 F, a$ o5 a& y
        sort(v.begin(),v.end());
7 U: `* v7 D2 Y, m# U; U        vector_iterator = unique(v.begin(),v.end());
/ ]' U- a, I$ E; V: G* l        if(vector_iterator != v.end()){- r. l9 S  k- J( y- T6 g/ Z
                v.erase(vector_iterator,v.end());- V7 s! h) _" b
        }
3 T! J9 q# A; L        return v;  }) U5 r8 ?+ h5 {6 E1 Y: L
}* ?: }2 p: F7 R9 |! o

1 p) Z" M, }6 t$ h; l//两个vector求交集4 I5 Z, I/ _4 Y+ R+ S; i0 L
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){! W+ G' Z7 g$ O8 |" a) o& s
        vector<int> v;* g3 _2 `, W5 k7 {& w- g3 r9 q0 T9 `
        sort(v1.begin(),v1.end());   9 f& q. W7 b6 c5 q/ M* b
        sort(v2.begin(),v2.end());   5 _! n) T' V+ F! i6 Q4 @
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
% _8 A4 w# @) ^% Q        return v;
3 o' ~. i4 {! B3 @7 W! d) H' [}
) B7 M  o7 X7 A; |; H- i % L( x5 w. a$ g* V7 ^$ X- f, }
//两个vector求并集
( J4 X" \& A: P4 D) D1 L& wvector<int> vectors_set_union(vector<int> v1,vector<int> v2){% G- u9 ?. a& s* {
        vector<int> v;" s0 P/ G2 d' n/ ?. H
        sort(v1.begin(),v1.end());   
/ U' |6 M0 S4 k6 {7 u        sort(v2.begin(),v2.end());   3 z/ c/ t. v" e7 `" q# ^: i
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
4 k* w# }2 p/ u        return v;
% }% n- D2 x4 q- F}
3 a. x" c! ?  V5 E 2 F  M. k# \0 `' J) N9 e
//判断vector的某一元素是否存在
# r, G# t! a, U4 I1 P& B/ ubool is_element_in_vector(vector<int> v,int element){9 @1 i# H" k& J
        vector<int>::iterator it;
1 |  v& ?! ?# M, `" `# Q        it=find(v.begin(),v.end(),element);! v  B( J, n+ D, {8 P
        if (it!=v.end()){
/ D$ K3 T* M* d) {: O. c* N) A3 }) Q                return true;' f  A/ t: d% E5 z& N; B& B* D/ h6 w
        }8 X& K: a, w; W) y
        else{
. Z6 j' n2 o) P* ^3 w& [                return false;
( L2 T- u" V4 B  m- K        }
) j$ }( {  G( d+ k}
( {+ A: R% O6 h; e' |/ A5 h
8 \# q; b0 Y+ M3 z* f2 k- x* w, Nint main(){
0 a/ M3 ?  Q1 ?5 y$ o  p        vector<int> v1,v2,v;1 O# m( `5 p( Z
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);+ @- }+ i0 o$ K: b/ O/ r6 w$ C
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;+ F& z: n: l/ _2 j# c
        cout<<"对v1去重:";3 p5 i  D. g! h% u9 l% s4 B: _
        v1=unique_element_in_vector(v1);
, q" n# O  t0 B" M; v        print_vector(v1);
7 b! ^' M" c, O" u        cout<<endl;* ]2 D: P" L0 F) W% Z) X! {
        cout<<"求v1与v2的交集:";
! Q3 ^! u7 l+ Z) u# X' v        v=vectors_intersection(v1,v2);) v/ b4 Y# _( g- T7 C0 ~
        print_vector(v);
( U4 x: V# C- ~; G7 t        cout<<endl;
  z  y2 ]! B5 S9 }* \% i        cout<<"求v1与v2的并集:";
+ E+ R2 [! j/ U) y' e) z        v=vectors_set_union(v1,v2);
$ l. X% [( a- ~7 x- a  _        print_vector(v);
' P$ v: p8 q+ }/ A        return 0;
& Q4 p. b6 X; u: j2 m9 u$ s1 u}[/mw_shl_code]
7 K. K+ q  L$ G$ i" @$ N' d
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了