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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
6 a* [2 m/ j; n8 C

( ~/ e4 @, ^" K1 r3 g) d' B7 eC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
9 e) q0 m. l9 Q$ z8 I3 y[mw_shl_code=cpp,true]#include "iostream"5 }7 a# ^6 [2 J! h. v8 h
#include "vector" 1 V& O) n& \* y5 \/ A  t
#include "algorithm" //sort函数、交并补函数- p0 Y2 V2 P4 m
#include "iterator" //求交并补使用到的迭代器
5 g9 r( f* Z0 `8 F9 y. [using namespace std;! i5 y2 k1 U. _$ ~

+ t8 X  |; |% o% V6 u# T$ D//打印容器vector$ K9 F, `( z* U$ `) k
void print_vector(vector<int> v){
9 E  J2 D  \, }  n* Z( J! O        if(v.size()>0){
1 ]/ _5 V- l" s                cout<<"{";  9 R8 z( t2 H6 D% b: D2 x" S5 n$ _
                for(int i=0;i<int(v.size());i++){  ; f$ g: B1 z3 A5 n, M
                        cout<<v<<",";  
( U" T4 L# e+ y! y+ ]+ Q+ l                }  
7 |) I  c: b; {/ V" q                cout<<"\b}";  
9 _  P; J- I) h% e1 A& p% u        }
: H) S  I, C$ b" ~% e6 A        else{6 V1 a, |8 H  |4 B
                cout<<"{}";
) S2 E, D0 ~& n0 e3 a% B1 e        }
" F0 z* [, m/ X1 m( w}) J9 Y. q7 i7 I) N/ H

7 e9 U; i1 W- H/ ~//容器vector中元素的去重
, t0 m  o: M4 X, ]- T2 X/ t$ w3 V7 R6 tvector<int> unique_element_in_vector(vector<int> v){1 B, M% M# V, ^9 C- o6 e
        vector<int>::iterator vector_iterator;
, j- k8 B- h6 u& L4 o        sort(v.begin(),v.end());# \0 U5 w7 F" H$ z$ F( U' {
        vector_iterator = unique(v.begin(),v.end());+ _& G) s9 [  w; ^) D, t$ d& y- R
        if(vector_iterator != v.end()){* X4 H  X0 M5 Q# G: d6 Q. Q
                v.erase(vector_iterator,v.end());
  W+ M! p  c0 _+ b/ O0 s! k        }0 d: ]4 y+ W/ [8 F& W  e
        return v;5 ^4 E6 Q# l" W/ p, g
}
# F+ b. f. w# W. v1 n; y 4 q& f4 G  B: L/ b. L6 M
//两个vector求交集) X" \4 S) B( l
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
3 _- Y/ _# f, P        vector<int> v;  a3 e5 c& U2 a: o' _% E  Q+ ?( P
        sort(v1.begin(),v1.end());   
6 o% A7 v' L- S        sort(v2.begin(),v2.end());   4 C0 A1 h. G1 f* \1 @
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 5 t+ C* G0 l9 J" P
        return v;
5 v" z' {* R8 T8 `}
! [$ b  n7 B  z: X( @  s; Q3 ?
/ t; C+ O3 B/ Z) m//两个vector求并集
9 q$ I. X) f9 o$ r: ~  P0 ~vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
. |0 L: m8 A. b        vector<int> v;
2 d4 w3 i9 s! x- M2 o        sort(v1.begin(),v1.end());   . F: T) l( S& }
        sort(v2.begin(),v2.end());   " y$ }$ G( J. e9 g
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 1 f% i- g! T  e. e" l( w( x! C7 |  u$ }
        return v;& D& y% V' G  P
}
' ~$ j4 A. g5 y3 }/ a
+ F3 U) y2 ^1 X( i$ {6 M# s//判断vector的某一元素是否存在
* Y# w1 ~  Z7 m; Q! Ubool is_element_in_vector(vector<int> v,int element){
8 ?/ P" ~2 X! R9 Q* ]2 ~4 ]        vector<int>::iterator it;
2 f& ~0 p; b* \  B3 W0 [, O) Y! r        it=find(v.begin(),v.end(),element);( G$ |: c" L, X7 l3 m( u
        if (it!=v.end()){6 l- n0 {% @' {2 r
                return true;0 B1 Y" O2 ]+ R3 S$ z' G
        }
3 O% E, |8 j; e& {* k        else{
8 c* ?7 C$ B, c& y) x, P                return false;
9 g" [+ l  I/ y7 @! m1 y) T1 B        }
, k7 e' N/ }# y, C( F* {  q}
& B! X4 k6 u1 J. V* M , b5 q$ J5 x' o% o6 k% n; s. x
int main(){
, e7 G4 W& J( h) r        vector<int> v1,v2,v;
# a. g8 C0 P8 ?8 S! i. p& \9 u        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);* s, J8 X+ S% D( V
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
  A4 K( O+ h2 S* O6 W3 [2 ~4 d6 [7 \        cout<<"对v1去重:";* {- X4 v3 {0 ?/ v# X$ a
        v1=unique_element_in_vector(v1);& O) T9 I& a" @4 L9 l3 G
        print_vector(v1);
( E  d4 N% H/ D: ]  l. Y) E2 `, L        cout<<endl;1 B+ z* ~6 u) F
        cout<<"求v1与v2的交集:";8 s0 |% I* v  I% N& m7 i
        v=vectors_intersection(v1,v2);
' Q* h! m# ^3 N) |% n        print_vector(v);
  O# m% `1 M# f: M3 j2 u4 H        cout<<endl;# t1 D3 Q5 F! n* ]  K
        cout<<"求v1与v2的并集:";
' x5 M, T0 u& B, l        v=vectors_set_union(v1,v2);
7 H& s# F- t% K7 w* i! Q+ [0 N& M        print_vector(v);
! h  ^9 {: v7 u3 W/ U        return 0;
+ Z% j- Q" Q+ K/ h: N: I+ }}[/mw_shl_code]# M$ r: v% o* F2 w) M& n
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了