PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
! W# _+ C/ f, c2 t* P7 L
; B( H" H# y* r! F4 d
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
) g: {& `& g! s  q1 U" ][mw_shl_code=cpp,true]#include "iostream"
& w1 H* }+ i; f, ^2 p9 D#include "vector" 0 v; Z* K2 y1 r3 `! L$ d4 q- B$ U
#include "algorithm" //sort函数、交并补函数
5 }6 ]5 `" H8 L8 p0 o$ X#include "iterator" //求交并补使用到的迭代器# i0 ^, k7 K( ~& A6 g1 P, \
using namespace std;+ W1 T( J6 {. u$ e( ~8 v

+ g% ^2 _6 O3 H1 x8 }//打印容器vector
0 y' u( @2 V" ?9 T; D, lvoid print_vector(vector<int> v){
8 o0 `# Y0 A% O8 r% @# j! s        if(v.size()>0){
2 Y/ c6 \9 [; y  G2 K% E                cout<<"{";  & o0 b  C/ r. c% ^* m
                for(int i=0;i<int(v.size());i++){  
0 f9 R* ?8 C+ B* m/ K/ w                        cout<<v<<",";  & A9 X- l; P( }6 O
                }  , S# G' ]$ v- `# C5 y
                cout<<"\b}";    h7 v: o4 K  Y- K* h
        }5 R8 i3 q# y( M0 ~, y9 @, y4 U3 Y
        else{/ i) M4 Y  E6 ]
                cout<<"{}";- }! m5 W; f8 X# `3 }
        }0 Z4 {, v2 K3 H; @
}  L9 t/ d9 D# l2 T1 }4 g1 n" u
7 R- c& I1 Q5 U6 W0 K5 V0 k
//容器vector中元素的去重
! g. ?5 G4 i  E% g& kvector<int> unique_element_in_vector(vector<int> v){5 V, u, V/ B( E" m& O% J% j# [; K
        vector<int>::iterator vector_iterator;
- }+ I# }( v8 G# @, r, B- [        sort(v.begin(),v.end());
* ?" e$ p7 r1 o: i/ ?        vector_iterator = unique(v.begin(),v.end());
4 @& N0 Y! R3 \$ c) L& d        if(vector_iterator != v.end()){. i; M) M+ L) |
                v.erase(vector_iterator,v.end());; B! d5 V+ S0 @. ]% `
        }8 R) K9 s/ @. X: f" V
        return v;
, p. m. T2 a7 u) c# Y. M$ C}
& u! @" m+ @2 G  [
! J  @' F- M! F1 K; @//两个vector求交集: C0 H9 g- p, b
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
6 p( p) m' M9 ^9 z& V/ L5 L        vector<int> v;
8 a3 ?2 h7 Y& r  s' A8 D        sort(v1.begin(),v1.end());   
  v, ~7 A" V5 N2 [( H- S        sort(v2.begin(),v2.end());   
3 H: w9 k1 a3 G0 U+ ^        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 9 f; C5 a! d8 a# c( _. J
        return v;3 v  S4 h* t; Q5 e! m* _0 w, d
}
6 M; Y# o3 n- A* `* ~* ?, L& C
4 V" K+ Q6 J3 c* a. i//两个vector求并集
* T1 E8 m" h/ ~# c1 m* Pvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
* n6 {. f, h4 e* ?        vector<int> v;4 U" v6 ?: ~  I
        sort(v1.begin(),v1.end());   9 ]8 w* [+ Y5 K$ _3 M
        sort(v2.begin(),v2.end());   0 w0 v+ P# B! A1 m
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
: p( x9 Y1 j7 Y& C; ?% E        return v;
/ ^+ l) R( Q# O6 b( C}* O9 Z, m: J9 C, f+ }! S( ]! a  Y

0 }! I/ S% y) F//判断vector的某一元素是否存在1 a' t7 X. S( f7 |
bool is_element_in_vector(vector<int> v,int element){5 ]( e, v3 @* @3 N) S
        vector<int>::iterator it;, T, A9 k7 \9 r1 P3 @, L9 w3 O
        it=find(v.begin(),v.end(),element);
; I$ j+ W) B) Y( T        if (it!=v.end()){
7 V0 n' e" Q) Q; J                return true;8 B* r: z! q9 g1 ~
        }+ H  a" ]+ O3 `! j. m5 M$ s  ^
        else{* X0 a/ R1 a  ~' K- X
                return false;
( k7 R: I& P9 I+ O        }. L$ K# ]2 k0 \0 {
}
% L! e) z' Y7 P( l% p' a% X+ q ) G$ P3 u$ E- y. d' H$ U% s( J  Q
int main(){
" {, d5 o5 D/ H0 t2 o! L        vector<int> v1,v2,v;. p0 X) S$ W9 o0 T( |
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
) C7 w9 B# W# w1 D+ S& w        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;( l! [- Z! d  M8 D  d) C, J
        cout<<"对v1去重:";
6 T: @" U: |8 ?( s9 G        v1=unique_element_in_vector(v1);+ A0 D; ]: a, M+ y7 r
        print_vector(v1);' m0 G" x2 L. c' v% c0 y" }# M0 T
        cout<<endl;
- |& t3 S- S5 ^) B/ |+ N        cout<<"求v1与v2的交集:";4 ?# Q0 K. r+ I  y/ }* r: c) D# g
        v=vectors_intersection(v1,v2);
1 I1 Q. f/ B7 |" X        print_vector(v);% T1 g0 Q. k' }( {  s
        cout<<endl;8 k3 {) E  |( o; U" o# M2 X9 O
        cout<<"求v1与v2的并集:";
) \" f+ @# k2 p% v. g" l        v=vectors_set_union(v1,v2);! c1 N. d' o0 _( G3 ]
        print_vector(v);+ l' i  s' b" n# u. b
        return 0;
) i6 J3 C' U( B. [& w. P}[/mw_shl_code]
- ~; g3 t; H2 A& o2 I% d, e
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了