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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
9 ?3 o# F& X' W- c: S

' o2 T* h1 Z, t, K/ Y4 ^C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
% K( K% V; h8 t/ s6 X[mw_shl_code=cpp,true]#include "iostream"$ v3 V5 Y0 R* e' g% Q
#include "vector" * O+ x8 u! i6 s$ o8 H
#include "algorithm" //sort函数、交并补函数( Z% G/ @- T2 H: s+ c+ c2 `
#include "iterator" //求交并补使用到的迭代器* V" S' l3 |8 c. Z! m% Z0 R
using namespace std;* ^3 j* N8 I2 ~" u7 k' H

0 H3 F* Y; A% P; p/ `* C3 ~//打印容器vector
: R$ o* c' S* f( D, C/ P8 k" z2 evoid print_vector(vector<int> v){
/ Z' _. r& x4 x' {1 s/ p        if(v.size()>0){
# t- I" N* k5 c7 ^0 M3 B                cout<<"{";  : M' ^  N9 J& o/ |" }! ?4 s& ~# ^
                for(int i=0;i<int(v.size());i++){  $ u* y! g! P, c/ `/ P  b0 a
                        cout<<v<<",";  ! x4 c% Y  X1 }, g" V* A/ }. T3 O
                }  
: X' O/ G+ d) O  ]                cout<<"\b}";  
2 t5 a% `) c0 a, z! X( G        }5 b2 N! s' e( T" c; _/ }, P# a
        else{
6 v. S: V( a% }- Q% t" K. t                cout<<"{}";
& u7 p8 O# v& n% X6 l& Z% v        }/ r2 ^, ^% m$ g  \2 z& ]8 B
}
7 y8 g! g% t3 _5 P& o$ y ' [1 v% x  R3 B2 E4 ?$ [
//容器vector中元素的去重
" o4 h5 l: ?) hvector<int> unique_element_in_vector(vector<int> v){
8 d9 o2 y1 [' U/ C        vector<int>::iterator vector_iterator;) K+ c4 l7 I3 U( k$ @
        sort(v.begin(),v.end());9 A+ G- Z4 f7 k+ @/ \, J
        vector_iterator = unique(v.begin(),v.end());! V  y5 b  Z! s, M; d- u
        if(vector_iterator != v.end()){. c) @) O  m+ ?# K0 e
                v.erase(vector_iterator,v.end());
5 k3 S& h% h$ E1 a0 q7 \7 {        }3 K  G, V0 E; F- m" u; S9 k8 k) {2 g' }
        return v;
2 \* e) W9 H: T. U  K* ?- D}% I8 q& P% Q4 W- A: e+ @+ I. k

3 g. v$ T! ?# A7 X//两个vector求交集
6 h( t5 _( J: f6 ]. h* uvector<int> vectors_intersection(vector<int> v1,vector<int> v2){7 x9 u/ ^. b9 Q3 b1 h" n, ]7 S% Q, l
        vector<int> v;
& O% B' q5 v8 h6 ?% o2 }9 p$ T. N  I        sort(v1.begin(),v1.end());   ; @9 _3 D% u9 h' ~% f
        sort(v2.begin(),v2.end());   2 k4 D( [0 h2 `4 c& g
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
; P1 X& Y, t6 D0 L) j2 |        return v;
4 _: p; w5 s( C}
: ]5 o  u4 G8 z$ N0 }+ ~1 V2 ?
  p- {+ j: \. l1 x9 U* \//两个vector求并集, @. n5 l' p$ r- _- T
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
8 y; X2 T& y1 _! _" T        vector<int> v;  N* ?' Y" l; ^6 X9 T
        sort(v1.begin(),v1.end());   
' x8 `; e& I$ H2 K        sort(v2.begin(),v2.end());   & Z. W; p7 Z. S5 c) c& B5 ^
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集   S; V; ^3 C& R* E1 k! a
        return v;: e. g* Q4 ^( b! z
}8 u( K$ C5 v. q5 C! r' |

& E1 c5 }( v" D: y% s2 ~//判断vector的某一元素是否存在0 s" @; D7 B: q  L
bool is_element_in_vector(vector<int> v,int element){
  L. r+ V: f) a        vector<int>::iterator it;9 [# ~" P9 X' a% e# E
        it=find(v.begin(),v.end(),element);4 f# P* B) ]: |8 {7 t6 K
        if (it!=v.end()){0 F$ i# F0 P" w7 ?: Z1 Y% Q& W
                return true;5 O& Y) d8 Y- A4 l# B, s, s
        }9 J" b) H. J' f& e) n8 }
        else{
( v/ ]2 u2 [7 M) I- M7 ]' @' W                return false;6 T. e- V! |, @# D
        }
$ k9 ~1 h% F3 ]/ Y/ Z}
9 y0 ]" d" N+ \ 5 y/ U( [8 U% P4 G7 L; P! J
int main(){# U! |5 q0 h; f/ I4 q3 p
        vector<int> v1,v2,v;  f. M% }1 x8 n  ]$ B
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
+ ?* f" ~8 L' J+ \        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;9 a% H! j3 G) }; r
        cout<<"对v1去重:";6 y* F! P; y; {9 o2 q* l
        v1=unique_element_in_vector(v1);
1 o. S! J: U( i* {- o# X: q        print_vector(v1);' |& g' |" c, t  T0 S
        cout<<endl;0 h8 V8 X* h$ c, H
        cout<<"求v1与v2的交集:";/ ^$ Z6 f% ~$ ^. d7 J
        v=vectors_intersection(v1,v2);
( X. h3 F! ^6 H+ t+ D        print_vector(v);4 M+ |# B' [- N% [
        cout<<endl;0 @! ~( x) ^0 O, l! |  |# V  _
        cout<<"求v1与v2的并集:";, R/ z/ g$ w$ b/ O
        v=vectors_set_union(v1,v2);6 a# q. B( y- ]5 ^; T
        print_vector(v);
2 u' Q3 E" I. {. n# z  g( J$ h        return 0;
/ V4 r, V/ f6 v6 y}[/mw_shl_code]
3 `. e0 n! q5 [4 v- ~2 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二次开发专题模块培训报名开始啦

    我知道了