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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

% r4 `$ y7 L+ s) I0 o3 H1 L, _) |/ A
7 b! w& ]1 v: t1 uC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:6 G7 g  i' [3 P# X# |
[mw_shl_code=cpp,true]#include "iostream"! V0 w# z8 e& l0 L( }
#include "vector" $ _4 B2 N( `8 p7 \& E3 E" s
#include "algorithm" //sort函数、交并补函数4 E* |8 d% P5 H$ ?; w7 n
#include "iterator" //求交并补使用到的迭代器( X" {% F/ U  E/ d+ i. n& M% k6 h
using namespace std;
2 }* r' _- i& k) H2 l5 w; y& c 1 y) v" Q: p6 M1 J% ?) b& K% i
//打印容器vector
9 z7 |# W- h' ^8 A$ O. s* Ovoid print_vector(vector<int> v){
9 A( e7 R; f6 h        if(v.size()>0){6 _# B* u; g. W9 m& Z; Y7 t8 ]1 f
                cout<<"{";  9 C. S( I) |0 q
                for(int i=0;i<int(v.size());i++){  
1 j6 e, |1 T7 M# g; d' u                        cout<<v<<",";  . R. C- u+ R7 {" D
                }  
- F/ n1 Q! {" }( @% K                cout<<"\b}";  2 `% [9 b/ ]& B; f3 z
        }
/ U: D: B7 Z. B$ f6 J: X# G        else{9 C- M- g/ r6 j& x* l5 W( E
                cout<<"{}";& V$ u' Z% f% h  D1 o# k% w
        }
2 @, Y6 Y% M2 q0 i9 S& a}
' l: I* E  R  E8 y0 S* d
% v, R7 R1 x& Z, b8 t* i//容器vector中元素的去重" Q% a+ R' H- S7 ]& h
vector<int> unique_element_in_vector(vector<int> v){
: A8 n2 A$ n8 o  l" l: j0 u" ?. c        vector<int>::iterator vector_iterator;2 j/ F4 S" R3 h7 m
        sort(v.begin(),v.end());
( ^$ g/ m' n- k2 P* X0 E3 e        vector_iterator = unique(v.begin(),v.end());6 `3 G) ^' d1 ?/ i) y+ H2 w
        if(vector_iterator != v.end()){
! C8 G: }0 {3 k2 x4 `: m) D# _# G                v.erase(vector_iterator,v.end());
$ j7 W, j) y# e" Y        }
4 _( q6 I' j) R1 L; a. R5 s  [        return v;. O/ e' b9 b  o. D% d/ l: }% q/ X
}! Z" N2 A2 P! |% T! h
- k) a* `/ A% J( p) Q1 H# T" D4 r9 z( z7 U
//两个vector求交集% K4 q! D7 A& u8 P
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){/ M7 y: b$ s3 A# I) l, z, z9 H* Z
        vector<int> v;
) u) f- f. q1 A4 |5 t7 G        sort(v1.begin(),v1.end());   - a0 q! T) l+ m$ g6 N& W
        sort(v2.begin(),v2.end());   1 N. ^4 S' U% T0 \  [/ U
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ! D* e2 A  y( E" |# A7 K
        return v;  X& ?/ Q# ^- B5 ?- |4 h
}
, V! j& l" ?" W ( J! a. l+ ^- V, e( W9 E9 D* t8 U
//两个vector求并集# W' c# P! W' l% R' \
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( A. f; {; u" L8 H5 Y        vector<int> v;
" a; H  D6 |0 Z5 d        sort(v1.begin(),v1.end());   7 ?' T. [( V" |1 @7 ~- z0 a
        sort(v2.begin(),v2.end());   
5 c* X) {$ U1 @; Y        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 - v) @9 K& V9 x( v. K; G  p' L$ M5 @
        return v;
) C  m; `4 S) k}; s% |  Q4 P) D4 ^

+ }' c/ a' u0 t2 c5 Y! K9 e//判断vector的某一元素是否存在
) r8 \0 Y# A2 C" `+ @6 ^  `! lbool is_element_in_vector(vector<int> v,int element){
& x/ {8 a) s: F& C2 i. A        vector<int>::iterator it;
; @% T6 P  x( J        it=find(v.begin(),v.end(),element);
: ^. M, Z4 K; l" n6 \, t        if (it!=v.end()){
1 y( c' W& {/ N                return true;
$ }9 T, n: ^# ~        }1 ]0 u. g) [& a+ F% G0 S( R; m1 B) _
        else{4 a9 h; g$ s: c: [: T4 _1 a# j7 |* @" l
                return false;* k" d0 ^6 M0 Q) t% N" W% S
        }& W- u) \' F2 W9 }; Z
}
6 u1 q8 Z# Q+ L0 S- J " \7 j3 P: I3 j
int main(){5 a% v7 y, G+ N' t
        vector<int> v1,v2,v;
$ A0 L% W  j8 r        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
8 |" J  o# k, U. b1 r        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;' X0 J+ Y! X9 M( R( a1 c# Z* K
        cout<<"对v1去重:";
1 B; T# U; p& C8 n  X" k5 n% F        v1=unique_element_in_vector(v1);
$ \0 ^5 w% e0 I) G. _        print_vector(v1);
* f8 K4 W# }0 W7 q$ I6 N4 v        cout<<endl;: }0 D- `* F& a2 N0 v4 J* z, I
        cout<<"求v1与v2的交集:";$ Z( V5 g+ H; K6 x9 ^" [
        v=vectors_intersection(v1,v2);( b3 w2 h/ U1 h9 p
        print_vector(v);; ^7 ]: _. W- I+ l2 `
        cout<<endl;
* W, }! U+ M8 V8 y4 z0 s        cout<<"求v1与v2的并集:";; N. S8 e) d7 ?+ i
        v=vectors_set_union(v1,v2);- h# I; a; b( U6 R
        print_vector(v);3 f: e0 P/ ?3 K
        return 0;
* C9 x8 e$ L% ^/ x& m1 ?1 A9 o}[/mw_shl_code]% V( V: {  m2 ]0 i" `; |9 c0 f, |9 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二次开发专题模块培训报名开始啦

    我知道了