PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2018-7-2 19:41:23 | 显示全部楼层 |阅读模式

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

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

x

2 X0 j- F' ~1 M4 D( N
0 {! i! O9 H5 C7 ^* L3 E* W7 mC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
" J6 K- K: l0 `: A. z( D" i[mw_shl_code=cpp,true]#include "iostream"
. m, U7 L. u4 i$ {#include "vector"
/ T+ W# [4 C: |! c  c- G; r#include "algorithm" //sort函数、交并补函数( Y. f5 m- u' S' p; _
#include "iterator" //求交并补使用到的迭代器. b/ k( `7 U+ P5 _
using namespace std;: p$ T( w7 T& @

$ D' g5 @# j( K6 @# ?% K. F, C//打印容器vector6 H" V9 F: y8 S" R; S( d( ~
void print_vector(vector<int> v){- B2 ?: P  o8 K
        if(v.size()>0){' U7 \) H: w+ l, X! P7 @" N4 ^
                cout<<"{";  
$ A; _' o7 b* E                for(int i=0;i<int(v.size());i++){  
5 s5 R* v  O9 w0 l8 f                        cout<<v<<",";  * r0 |5 W0 v6 A3 G8 a
                }  
8 z' ?) s9 V) [0 [+ @/ x/ [                cout<<"\b}";  / {" H. ~' b1 F" Z, ~# b
        }: G. x8 {: E+ \9 V, [, |% i5 N* y
        else{- r6 r; C2 C& c2 ^- b! t$ [, B
                cout<<"{}";# Z/ V0 d( \' Y
        }
/ w. H4 _' B4 T- a2 r. R  v}# E+ z* `3 n+ D/ g7 I

" _8 y5 e4 i" q  H//容器vector中元素的去重
: u$ ]' K5 n4 v0 q0 ^" h0 m  Hvector<int> unique_element_in_vector(vector<int> v){( K) U' Q  s4 m9 C' i  {
        vector<int>::iterator vector_iterator;
  K+ y4 z7 N6 M        sort(v.begin(),v.end());" }: {/ S7 N6 Z
        vector_iterator = unique(v.begin(),v.end());" W, V, I% g5 O& F
        if(vector_iterator != v.end()){
9 `' @  D) \$ Q; ?( i! j                v.erase(vector_iterator,v.end());
1 Y& {9 D5 @& D% I        }
+ m  e5 \5 W' ~6 o        return v;, L# _6 k' Z2 i! l) }2 G# J" r
}
1 x( C  w/ R; o4 \1 ^1 P % R$ a0 b% z3 g5 C+ {) w9 C
//两个vector求交集
( t8 Y4 {: P7 @  A$ i' pvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
, S" s1 O+ Q; M3 Z1 ?) J        vector<int> v;' v5 @: M, N/ a+ P- M
        sort(v1.begin(),v1.end());   0 w  R+ z1 H  y$ I% W; ^2 z0 K8 W
        sort(v2.begin(),v2.end());   " w4 y/ i7 P+ p
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
: {0 P* @$ x9 s; y9 _        return v;# D+ u. e) H! F, K
}; v/ j6 ]4 l9 W# J
- }. X9 I  k  w1 U# k
//两个vector求并集
" \1 V* i2 \5 i9 r/ w: W% O6 Yvector<int> vectors_set_union(vector<int> v1,vector<int> v2){, R. t# B- t$ G* b% i1 k* B7 `
        vector<int> v;, F: f8 v# e% ^
        sort(v1.begin(),v1.end());   / n, E; J& C8 P5 u- n
        sort(v2.begin(),v2.end());   
* w$ @( b( d1 w: d2 o        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ; D+ H3 Q! A8 M1 T: L( F
        return v;0 Z% X( e5 \  e" y! X, {0 S2 z
}  B7 A+ y" e& l9 t8 ?) n
7 b" B2 J& {6 C* w
//判断vector的某一元素是否存在) i0 `0 F  G( \8 I' r. R. X/ `
bool is_element_in_vector(vector<int> v,int element){8 ?0 ~/ c6 y$ P( D7 Y
        vector<int>::iterator it;  C) N3 N. J- J/ {' _3 r
        it=find(v.begin(),v.end(),element);" L/ \3 G4 \( ?4 p* U
        if (it!=v.end()){
  b% F/ f7 u# w& z$ o+ s. H* Q9 F- |                return true;7 R! K$ @- Q0 R) _" s' C
        }
! |* d3 o% D8 |$ T3 E- v        else{6 a' F" ]7 h7 h# V
                return false;
& B& w: K3 t( K' G        }
$ {; l' A- ^& \}4 @! ]# i  P% K$ S

6 t1 D. J# d+ s; Xint main(){, T! Y/ _0 I! j
        vector<int> v1,v2,v;7 |: r0 ?4 h, _$ u2 T  l
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);  I; G% H: W3 {3 c
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;* R7 ~  G. `3 K, A- c, ]4 F) l2 Y
        cout<<"对v1去重:";
2 r& R( ^. V/ B7 M2 j        v1=unique_element_in_vector(v1);
  s' _. u( @# u7 P        print_vector(v1);
- ~; ?, \. q; L5 I# i        cout<<endl;8 u" `' Q7 O* C: V/ x
        cout<<"求v1与v2的交集:";+ r% ]$ M& `4 T( B8 I6 [$ ]
        v=vectors_intersection(v1,v2);! x3 I, V) x0 l: G
        print_vector(v);+ L0 ?6 T4 k: b5 m( H+ a$ R* n
        cout<<endl;
- w2 F8 w) y* \: ^- O3 j        cout<<"求v1与v2的并集:";# N' T# Q3 A  b# a' o6 |8 ]
        v=vectors_set_union(v1,v2);; Q* s: _0 D3 T: K+ E
        print_vector(v);
% b( U( E) L. B$ p5 e$ j7 g        return 0;
5 H- B3 j- [4 r' h: f0 T6 I% M}[/mw_shl_code]4 @4 L/ v& t9 J
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了