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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

5 J+ p' E7 L# m3 \, w# u; [" J8 r  q- S+ A7 [) ]6 b' K
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
- i" E" t( O6 ?: V* ^[mw_shl_code=cpp,true]#include "iostream"( _- {, o0 r& O/ U
#include "vector"
+ I! ?# z9 X) ^' v4 D: n. z& z#include "algorithm" //sort函数、交并补函数  g7 E8 Y# J& u5 u* D' {, @4 w: U
#include "iterator" //求交并补使用到的迭代器/ J6 m2 }$ c6 \( z
using namespace std;
; _/ |0 l& a- s* @
+ r- q+ L4 Z: k- P//打印容器vector7 T, W6 p' p# M8 f" `; U
void print_vector(vector<int> v){: a0 s, y& c/ w6 r: C4 D
        if(v.size()>0){
3 z8 ~$ U& K1 m' A$ q  t                cout<<"{";  
! x, _, s4 d' M9 H' @( @                for(int i=0;i<int(v.size());i++){  
3 i0 K( Y4 I0 i$ m6 {% C                        cout<<v<<",";  
8 s8 ^/ a4 r+ I' p: d9 J                }  
* m4 P3 h* H+ |$ A3 D                cout<<"\b}";  ( B% p6 y  R" b3 R4 \, D
        }* [# L& X: q4 x
        else{
: B2 M. S  z# T+ r* O5 J                cout<<"{}";
: z% b8 C+ t: m' @% T% m% V        }
6 K3 a+ E5 R+ l" U$ v* K1 i}
. `" l# ~! u! k8 m; V& t
4 z! s- F1 F: d2 ^- S9 `//容器vector中元素的去重
) N: ~* L0 Z' wvector<int> unique_element_in_vector(vector<int> v){/ u/ y! D* }0 c) o/ H  t6 x" Q
        vector<int>::iterator vector_iterator;& ?# h: o8 ^9 n# l, ~0 o
        sort(v.begin(),v.end());
; r$ u- p* a; Y% O        vector_iterator = unique(v.begin(),v.end());
* F0 `1 y& x6 ^) x; u        if(vector_iterator != v.end()){
' a8 x% ]* V' x- s                v.erase(vector_iterator,v.end());2 l$ l; V0 G! b7 b
        }6 e7 g' D/ I) g6 L! S) C; c: X& ]
        return v;/ y1 L( E9 K0 x  y" f
}" X# K$ R5 c0 }) R7 k# T
" `8 H! h! W8 Q+ x0 j
//两个vector求交集
$ N0 ]/ k$ ]0 m% Z9 C* G9 }vector<int> vectors_intersection(vector<int> v1,vector<int> v2){* o8 u1 |# ]6 F: [6 U* o. h! M
        vector<int> v;' N" E( n5 l" W9 L
        sort(v1.begin(),v1.end());   
; i7 |0 z+ B7 b# j        sort(v2.begin(),v2.end());   : v" Z. I1 i* k: p0 i
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 - b/ \1 e; W* T$ }6 M
        return v;8 N" }, ]. N( F  T
}# D, o: a' @7 w2 t& j
- h% r/ W6 z7 M
//两个vector求并集
: O3 l! P, ]2 q. ^& `, q7 mvector<int> vectors_set_union(vector<int> v1,vector<int> v2){8 d0 U8 e1 T0 B. I6 o) H
        vector<int> v;
( o+ O# Y1 T" K/ X% E, Z        sort(v1.begin(),v1.end());   / n: w% f8 Y: M. m6 C& F
        sort(v2.begin(),v2.end());   
) Y3 U: }( @# {8 m1 P& C# k4 w        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
: C6 f1 Z  c- @3 Z' [9 s        return v;" l( v1 G/ x7 a6 m& p# @( S; I' p! L
}; j) F9 K/ F0 L- {% i7 K4 Q* H

7 X* t$ }9 I$ K6 p$ v  S+ g//判断vector的某一元素是否存在
+ Q4 v6 ~, t, sbool is_element_in_vector(vector<int> v,int element){
* o+ @. d4 O. T6 V( H4 O        vector<int>::iterator it;
9 l  r8 ]1 Y/ N' b" d! Q8 F        it=find(v.begin(),v.end(),element);
* D% ~9 w/ I0 C6 k& O( O        if (it!=v.end()){
8 N4 \' T- G9 N0 @                return true;9 S( g8 a- l& ?" o
        }4 \0 s+ E' b' z% H' L0 U7 A
        else{
( x  `( x/ ?2 L6 J9 x" Z& Y/ @; c                return false;
0 `! ?4 h. W/ j. z8 a        }3 A- p2 O4 {( K
}
3 M- E+ c* t" F0 ~ " b! L1 Z8 E& @7 I
int main(){/ U' h7 _3 o' n' r! k: p8 t: W
        vector<int> v1,v2,v;
- M' y$ a( X5 @5 y/ e5 r        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
: n/ s& g+ g) h6 t        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
9 Y6 |! R" V6 P" o        cout<<"对v1去重:";
  c' t, B* c* b  L$ t4 D; }        v1=unique_element_in_vector(v1);
: U4 F2 K9 l* B$ p- c& B+ i6 Z        print_vector(v1);
3 _( M( J' `. F* g$ f        cout<<endl;' R/ I- U- A6 A5 y
        cout<<"求v1与v2的交集:";2 {: L6 y- I- m
        v=vectors_intersection(v1,v2);$ {  z0 H& G3 G; B6 z) O' h; y, I  ?
        print_vector(v);
1 w: ~/ U4 g& `) A6 q  F2 g! p        cout<<endl;
& I( u4 R1 D3 U% H# |: K( ^, k        cout<<"求v1与v2的并集:";
4 t0 F2 R5 i) S' @        v=vectors_set_union(v1,v2);
7 r8 m7 W% @4 w        print_vector(v);9 ^: Y8 Z/ s: H, n
        return 0;
# I3 A6 O8 f; b0 v: b}[/mw_shl_code]/ b0 l4 \' W6 a# b& h6 y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了