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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

8 e/ P1 j6 q- |, G$ z* X5 s' `) h9 v: s' n: T& z, q
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
# d7 P$ a7 Y* S  h% S( l' _8 M[mw_shl_code=cpp,true]#include "iostream"1 y; T% y9 e! Z2 q# K$ M
#include "vector"
( I4 J8 u+ {9 P! m#include "algorithm" //sort函数、交并补函数
6 z( W- F6 t# t+ w: E5 p. J2 Y#include "iterator" //求交并补使用到的迭代器
' ~2 ~1 _! ~6 A. W9 wusing namespace std;
6 ^/ H: D$ a# T
$ M! _& G4 a; {8 m! T0 o//打印容器vector$ ~. l7 Z9 i7 B+ [/ \
void print_vector(vector<int> v){" }; D  s8 i* O& y$ M! Q
        if(v.size()>0){) G. X4 o0 [) s9 K4 X
                cout<<"{";  5 F! Z/ B! u" R9 B, y4 Y
                for(int i=0;i<int(v.size());i++){  : u/ O) \! B1 g. E# A
                        cout<<v<<",";  * A& ^. `" D; W1 i
                }  
; \% V8 c+ O  _9 {) I0 Z                cout<<"\b}";  ) y$ Y# m: O- E+ S/ E( Q
        }; Q4 W0 q2 }0 ^5 Q3 c  H9 G! Q1 J2 }
        else{5 O3 m' D; v% v6 {6 j# I4 a% j4 y
                cout<<"{}";
- S/ Y! i5 M9 w7 Z1 n/ f        }
" w! Y. V- j+ S8 w: @1 `4 }  I}
9 \, ~. y  l1 m0 I5 y7 A6 \ # A4 T: l* ~6 h$ @- l- e3 U8 i
//容器vector中元素的去重, q6 A/ H4 z  [$ {, g
vector<int> unique_element_in_vector(vector<int> v){+ T! a( y5 z' y+ c8 G
        vector<int>::iterator vector_iterator;
9 T* \0 E3 l3 o5 T. n# n/ O        sort(v.begin(),v.end());; j3 V% ]7 U0 N' K7 i
        vector_iterator = unique(v.begin(),v.end());
& N8 a2 c: e0 ^4 X# Q. n8 [6 h2 F- U! g/ n        if(vector_iterator != v.end()){4 ^! c- ^# i9 D/ C
                v.erase(vector_iterator,v.end());
+ C2 C6 G, _# q; i% d        }
+ X3 T* Q5 l" p        return v;3 \; S9 @3 C1 x5 p; H
}" Z0 m, d$ @* I& e3 d' R

3 }6 ^+ q- A5 L//两个vector求交集( ]: T4 ~' N+ _& v3 \. f  }
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
; u' y- q1 U6 s2 u/ o  D! p$ L) c5 i        vector<int> v;
- J9 O9 [; T2 e% q( L0 c  ]        sort(v1.begin(),v1.end());   7 E/ x4 Z* r; s7 P  p0 S
        sort(v2.begin(),v2.end());   
) g" N7 d% ]: J+ G- S        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
+ o6 K9 b  y1 ]! {" {# M" T        return v;
" e8 e1 \' o" e1 l" U}" {3 K- ~8 y* M4 k3 U
4 ?1 y; b) X4 }: T# k
//两个vector求并集7 `- Z1 S% z" |
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
: `4 y2 I1 Q! j, I, v# [        vector<int> v;
+ A" D; n& Z  Y8 _        sort(v1.begin(),v1.end());   
, f+ D& q0 Q9 k: o1 Y        sort(v2.begin(),v2.end());   
- |% r* _( `  t0 z( F4 y        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) N4 N  b) ]- V        return v;, J" _+ P5 \9 [
}9 M( H$ V* ^! a  v" d3 L

3 s, Y+ c: }' `2 y0 c//判断vector的某一元素是否存在
/ P& c3 L9 K1 tbool is_element_in_vector(vector<int> v,int element){
3 h/ J8 _6 \6 P% R        vector<int>::iterator it;
" K- m  ^' H& m' v8 x% q8 f  e        it=find(v.begin(),v.end(),element);
3 @4 s; S( [5 U0 d" B5 z        if (it!=v.end()){0 R7 b" v, {4 I$ a* q; Q0 N
                return true;
  E8 c# k# t/ p3 g7 F        }
9 P9 d; n) d+ M        else{
  a6 A; r8 n3 N- ]/ c: L, s' d                return false;& }1 {% l3 F, u( B/ X1 u- T7 m
        }
! K  H2 R# X* b}% f# {0 Y4 t' r8 @6 t9 q8 M) f. P
+ h) S6 @/ Z& `  S2 v# T. N
int main(){; U8 x# a2 J! e; J* m( ~% Z
        vector<int> v1,v2,v;
. A. [0 w* g: s+ W        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);+ G1 U/ ?; W4 P4 R! K+ V* @
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;2 k* r: s* {- f% r( W
        cout<<"对v1去重:";
, f. d( a: X* q% @" s6 e, i        v1=unique_element_in_vector(v1);  n2 a) y  r7 }4 A& C! Q* h
        print_vector(v1);
+ A* n2 @: e7 u7 e3 c, w) H8 D) Q        cout<<endl;
) i. V/ {6 B: g8 H% i        cout<<"求v1与v2的交集:";
8 G9 e- N! D5 d' ?1 C( b4 C        v=vectors_intersection(v1,v2);; T5 x9 X" y7 _$ ]/ z. q) s
        print_vector(v);
8 i7 F" ^, Q6 D$ e# W, f        cout<<endl;
. b# _* m1 O% q$ i( e2 g* n/ C        cout<<"求v1与v2的并集:";  s. f5 p) S' D4 Q* h  |7 ~9 ?
        v=vectors_set_union(v1,v2);- m( K' ~* V2 ?$ \/ ?
        print_vector(v);% a& \& y1 O. `
        return 0;  _6 C7 B6 w1 U: V& J' D
}[/mw_shl_code]
5 ?' b  W  a' @& w! D/ M1 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二次开发专题模块培训报名开始啦

    我知道了