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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

8 E. K% O7 j( ?7 m
/ f' e4 G6 T1 @3 _% C4 z8 {C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
( H* i- p4 ^+ t3 ?$ n: i8 E[mw_shl_code=cpp,true]#include "iostream"* n) T' m0 Z6 s8 A8 X  F. u
#include "vector"
* g, \) ~/ Y' R- |2 F: Q#include "algorithm" //sort函数、交并补函数. W' `  y, m6 G
#include "iterator" //求交并补使用到的迭代器/ ?" S# d# D6 ^; M
using namespace std;+ U9 i& F1 h! m# u

! \/ t: ]" I! G, ^2 ]7 O* ^//打印容器vector3 A) X5 v4 K) z' h
void print_vector(vector<int> v){+ I5 S, [/ g) v# ^5 p; J+ \
        if(v.size()>0){
& x/ F9 v; C7 `! A' C6 C# i$ j; `                cout<<"{";  " G2 M* [. `8 u5 N
                for(int i=0;i<int(v.size());i++){  
: \! @6 s5 h* A+ i                        cout<<v<<",";  
" h- e0 U1 d1 K- c- I1 C  N4 L                }  
9 `+ T2 `) J+ R; s( I# g                cout<<"\b}";  # |& A* p% j* \$ C0 `2 p
        }$ L% w* D& f* l. l
        else{  ?# z3 u2 w( x4 V2 v
                cout<<"{}";
/ |" X0 ^; x3 G        }
% i4 @/ L* f* b5 e  R0 c* I- G( e}: j4 h2 a5 q7 e" g
  h) R9 U: o) N
//容器vector中元素的去重
% ^" p$ E* I/ Z1 F/ `6 I! C5 Cvector<int> unique_element_in_vector(vector<int> v){2 o; ?0 V" E$ k, @( ^
        vector<int>::iterator vector_iterator;! k5 Y( ^0 N, [1 Y" F
        sort(v.begin(),v.end());+ b" ~' D, r. \5 d- c
        vector_iterator = unique(v.begin(),v.end());; \9 j& l' t0 C
        if(vector_iterator != v.end()){
7 c# Z0 r( Q# z' m/ @. d, \                v.erase(vector_iterator,v.end());
7 W7 X2 u( T6 f8 o/ K, `) ^$ O        }2 E+ t" o$ e1 ~
        return v;4 ]7 D. v, G. f; M6 x0 R0 ?
}
- A! {6 @% N/ ^ ! [! V' j1 |9 a9 d
//两个vector求交集8 @' \; d" ~* S
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
/ n) v; ?- o0 K6 ^        vector<int> v;% P1 |: y$ z' Y5 q' r' t+ n4 `
        sort(v1.begin(),v1.end());   
- \3 y& Z) W! ]  ^2 Z/ E        sort(v2.begin(),v2.end());   
7 K+ d+ c; t; {        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ! k0 x; I, @$ C4 b8 f/ F2 M( Z
        return v;
8 f. i0 Z9 A" F# ]6 n9 `" `}. c8 Y" D/ D4 g6 J$ B8 g2 D. ]+ U

5 S  f$ [& b, m, s8 x//两个vector求并集
: M8 r, x1 v' R. i* ]+ rvector<int> vectors_set_union(vector<int> v1,vector<int> v2){0 d4 V1 E0 I0 o' C2 {7 X
        vector<int> v;
. `# p: l, j. E) i, K, s+ m        sort(v1.begin(),v1.end());   5 I+ Q* R6 G, j
        sort(v2.begin(),v2.end());   
+ p* D6 t7 q+ F% B$ W# w        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
" V) \4 {" M/ E( g* {& l, \        return v;
4 u' q* _: r7 J% J. y}
6 k% D6 H, d% F/ e
% n  ?6 m0 s- D$ U1 E4 I! }4 c7 Z//判断vector的某一元素是否存在
$ }7 z" d0 w( P( qbool is_element_in_vector(vector<int> v,int element){
  U/ _: `1 y& w2 u1 @  b  y        vector<int>::iterator it;; \/ i+ w' Z* V: |- j3 a" H; V
        it=find(v.begin(),v.end(),element);9 T) r4 d0 Q/ J9 d2 T
        if (it!=v.end()){
! ^4 D2 z+ R1 R/ C% H' f' h7 d* Q                return true;2 U  `3 ]: H3 ~/ {. \8 r
        }
1 w% ]- f% c  B# w- u' j. N        else{7 s: r+ k! \9 M
                return false;
; l" F0 b0 d  j- U1 Q' v        }' y) h1 m* F9 I
}3 P' s1 d* p5 w9 @' [
0 ]9 G% R6 P* n- f. p. y6 z  I
int main(){$ k0 Y; e& O- _3 n
        vector<int> v1,v2,v;' S# H. s! Q1 S2 N* J/ W0 t
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
" O- W( R  ]2 W        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;& p" l4 D1 D8 }5 s4 f4 n
        cout<<"对v1去重:";! C6 L4 t9 d7 q  `5 a3 o9 ?
        v1=unique_element_in_vector(v1);
$ T# ?5 \+ l2 k6 p0 ~/ @( m        print_vector(v1);3 T2 ^+ K" f* T5 b+ O, ~
        cout<<endl;, v# f, b3 o8 f
        cout<<"求v1与v2的交集:";$ p9 t8 N$ D( ]2 C% F
        v=vectors_intersection(v1,v2);
; E) G  R' N  J2 H) C0 O) Y6 t5 F        print_vector(v);
3 w6 l1 f1 @/ }' u6 C4 C4 A        cout<<endl;
0 g9 y1 I! }; W  O/ e8 k/ {/ @5 z5 [% n        cout<<"求v1与v2的并集:";
9 ~  _* A7 r1 J- Q3 b        v=vectors_set_union(v1,v2);  x- ?6 q. o  s2 y0 f9 A+ d
        print_vector(v);
/ a0 y, k7 H0 _( m        return 0;9 R) k, F2 d0 n- ~
}[/mw_shl_code]& f+ g/ S& L# c, K
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了