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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

5 @8 `. _/ e/ y
- U- ]) h" M3 A9 k" q/ @# W; qC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:2 l- I7 q1 g8 A* f
[mw_shl_code=cpp,true]#include "iostream"
/ ?2 E' u) [% [# L+ \! C3 m#include "vector" 5 I( A7 ~, ]* _( l: @0 e9 v, K5 {
#include "algorithm" //sort函数、交并补函数
% C9 R: }8 G4 I, ]#include "iterator" //求交并补使用到的迭代器$ r; p% w# I8 _7 [, D
using namespace std;0 F) c" r- ?! C4 Q

3 I# ?3 P; [5 i3 c, |//打印容器vector
0 D8 e7 B3 |! \  dvoid print_vector(vector<int> v){
& H0 \! A. M4 |: Q        if(v.size()>0){4 Y. W9 E' |& u& h
                cout<<"{";  
; g4 j  P1 E$ z( ~. `% |8 C                for(int i=0;i<int(v.size());i++){  9 A0 g- e7 W2 B
                        cout<<v<<",";  
. Q$ k9 i/ |; q                }  
% Y2 V4 D+ ~+ I8 B7 b2 m% F8 n' ]                cout<<"\b}";  / d3 e5 x& V; D' O, y
        }
: E' t* R4 j! a0 ^; Y        else{
1 B2 ~* F3 ^* F& _6 Y1 z! X                cout<<"{}";; Z- h2 S8 x7 l- S& r' i8 i
        }
5 y0 w: c0 b6 e4 H/ ^) a% P( [+ f+ l9 K}
; b8 [* y8 n6 l* M; l + c: w5 n: `& ^' l& {3 t9 l$ a0 z
//容器vector中元素的去重
  o  X. x. U# k& Z+ Yvector<int> unique_element_in_vector(vector<int> v){% ~# F. i6 f5 w# J4 y: l- V" O  P
        vector<int>::iterator vector_iterator;
) A% z; P8 y( k        sort(v.begin(),v.end());
* n  u- w- @! Z- c$ [) G        vector_iterator = unique(v.begin(),v.end());- ?& g/ O, E& ?0 g+ F4 `0 `2 s
        if(vector_iterator != v.end()){
$ H1 ^, \8 K' v9 A% S9 c2 o: N                v.erase(vector_iterator,v.end());" S4 n2 S; [3 i7 Z) e
        }2 x: W5 O. ?8 ^# g1 S
        return v;+ \- \0 f5 n% ~' @# q- q; f: S) i6 w- x
}, |" U4 Q$ h+ t+ r# ?1 k

; \2 g7 z. N4 g: v//两个vector求交集
5 k2 T* e* e- I2 jvector<int> vectors_intersection(vector<int> v1,vector<int> v2){6 A( b2 A3 p' m/ K& o
        vector<int> v;
: U& k# y: D* T+ W! Q; Z        sort(v1.begin(),v1.end());   
% l" Z$ M8 O9 i: o7 m        sort(v2.begin(),v2.end());   
7 F" ^* R1 a, s3 [2 a        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 s  F) j% s, f* e
        return v;
0 m7 [' g' |7 q! ~0 I7 [}
, q) `& \: S  z 1 z, a. Y) \- j* J! g) W
//两个vector求并集0 ~2 X( {7 Q( _  d7 p' Y0 F
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
% G0 B" x* h- |. k5 I# T1 t0 @        vector<int> v;% \* f9 b# j. w9 A- w. A
        sort(v1.begin(),v1.end());   
% `: g# L0 A* u8 u4 _# O7 M5 D        sort(v2.begin(),v2.end());   8 E9 y' V# P# a1 V
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
% U, c0 o2 J5 _  R% m& K        return v;
3 e8 |% _) E; H3 [}) Q  {8 \% o& ?, S3 d8 l) C% S

5 ?3 X' o- N/ F4 n$ o//判断vector的某一元素是否存在+ t2 K6 s' `0 B; J' w
bool is_element_in_vector(vector<int> v,int element){& `! _% _- X% ]% o3 ], A
        vector<int>::iterator it;5 \4 T  ]+ w7 y/ ^, q- {
        it=find(v.begin(),v.end(),element);( y3 ~! \) x' W
        if (it!=v.end()){7 f$ e  m5 S. ]( @4 f& p
                return true;
) n7 D9 v4 P/ J- T( ]: h1 H        }
) A* B$ `  A  j3 B  @$ K        else{
- @4 i6 R. m+ a                return false;' X+ h7 ?! Y) j- b7 N( X
        }9 d2 _6 Z# O' O- U* y
}8 U0 M/ R* s3 W: ^! n+ T! C4 m
8 i, g/ O& h3 L  a
int main(){
( T- Y/ W; h# j/ Q        vector<int> v1,v2,v;
$ R  H' S) `' H0 v, T& m- s8 @4 V        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);4 Y8 u- @: i% O( x4 U
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
/ U, l4 r/ K9 W7 `. o, V/ r, s' a9 b        cout<<"对v1去重:";
) O! q" ]) i# S( e        v1=unique_element_in_vector(v1);3 l, w4 S& c1 X
        print_vector(v1);8 P% j9 [( p9 z3 v2 _
        cout<<endl;
7 m  _0 ?! m; ^- T        cout<<"求v1与v2的交集:";: Z" P% e- w& r5 O7 a0 N  C
        v=vectors_intersection(v1,v2);( j9 g1 ^; Z' S( \2 ~1 [: V
        print_vector(v);: r4 @' |8 j5 Y  J4 l4 z" n
        cout<<endl;
- |4 O( R7 Q) u- P: ^        cout<<"求v1与v2的并集:";
  {) i5 ]" J2 ~1 ^- e, c) A2 D        v=vectors_set_union(v1,v2);+ l1 T  q- w8 R& z2 A9 @  l: g  Q
        print_vector(v);2 C7 @* z( w* w0 ^. G/ O
        return 0;$ t/ t2 y3 h6 \3 u3 L
}[/mw_shl_code]6 g5 c( {; o% P, J* A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了