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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

# b" c. J& R. R- Z& Y. Q) W& L7 j) e' G+ Z: ?7 C) Y
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
; B$ h/ ^) a2 E$ {2 i( t9 n0 Y[mw_shl_code=cpp,true]#include "iostream"
5 O/ ~; ^. z( E8 K. G0 g#include "vector" 8 Y% |" ~0 p8 t0 |% P3 {
#include "algorithm" //sort函数、交并补函数
, Y7 A. h- a/ E  @% e5 {; B#include "iterator" //求交并补使用到的迭代器2 w7 e/ l4 X  P+ F+ M
using namespace std;" B4 E, |6 P7 }7 t5 Y/ W1 n
. X& W; N3 h4 u: K7 H; H6 L
//打印容器vector0 l) q  ?- ?2 o
void print_vector(vector<int> v){* L5 J: y5 b' [# e$ ]/ b( G
        if(v.size()>0){
& E4 J$ a/ m, u7 G- y9 U5 {: @                cout<<"{";  ) V5 R$ [( M$ q% a
                for(int i=0;i<int(v.size());i++){  % t4 H. P! Z; W  z. J9 m
                        cout<<v<<",";  $ l5 U6 R  ^- N* E, H: Z/ O9 ^
                }  ; c9 \# n3 b/ B) H* F; O
                cout<<"\b}";  9 ]$ t: F2 o3 Y# S2 O
        }( C. j( n& F2 a/ A4 u3 U* w$ r- q
        else{
: V; y7 k: Y, B/ x                cout<<"{}";
3 `, R. ]- ?0 j# K        }! F; I9 r5 g0 l) w5 r' c; l
}" u4 r: p/ Q5 M! t4 x/ g. i
$ J+ R0 D9 e+ W# \2 X2 M* e
//容器vector中元素的去重
: L, s5 _4 I. Tvector<int> unique_element_in_vector(vector<int> v){
* d9 |# |0 g4 \( }3 E% x        vector<int>::iterator vector_iterator;
! H4 U( b' v) B: Q        sort(v.begin(),v.end());
/ E: r: a( L5 ~, H5 h1 B3 ]        vector_iterator = unique(v.begin(),v.end());$ j, U& a+ e$ Q% i0 n" k
        if(vector_iterator != v.end()){
; v( y$ Q0 I; q1 G2 w                v.erase(vector_iterator,v.end());* |, y+ H; F6 h( n. u1 X
        }
1 ?" q5 o) c& D$ Y% |! p        return v;
3 S) S. U( \! A/ ~$ b}
, g# z9 F1 v6 K/ N) H+ M/ _ 0 p' K# C. z$ s. o* k4 q
//两个vector求交集
! B  R/ x) g( r! \& }+ z* Cvector<int> vectors_intersection(vector<int> v1,vector<int> v2){0 d; Q8 x/ {) X* d9 d4 m
        vector<int> v;* V; M$ ^: x4 S. h: h
        sort(v1.begin(),v1.end());   
3 `/ s, o" g- @. ^        sort(v2.begin(),v2.end());   ! M& y1 F% V* ]
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 Q/ d, t% e; t& |% d/ j
        return v;. j" P* J1 _' S4 r) i* i$ p. s
}# T7 i6 @. W) F; b& h1 i% ]
6 P: N- o+ ~( @; c  p0 t& `" u" [
//两个vector求并集
+ M% O' M% f( l$ {" C" n+ bvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
. o" J8 a0 H1 m! p        vector<int> v;5 o5 ^( ^% b. _& z: v1 A7 a
        sort(v1.begin(),v1.end());   
% g! v& Z* H) g        sort(v2.begin(),v2.end());   8 t  [6 W3 S) ?, J. J
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 5 M% h7 Y4 Z, f' [8 H9 ?
        return v;
& m6 ]! V) e5 c2 w}
2 A) V* X( E& ]$ ]. N1 n5 Q
7 X! W/ e) `! g//判断vector的某一元素是否存在
# ^: I9 R9 a2 t  l7 wbool is_element_in_vector(vector<int> v,int element){
1 p$ t6 Z; {9 a: C. k- ?! v8 `        vector<int>::iterator it;
# Y0 x8 E+ r1 A- C& y: M        it=find(v.begin(),v.end(),element);
' i9 g  n7 S: y* m3 H) [' v        if (it!=v.end()){+ F  @2 V$ e, ^/ f1 L9 [) O
                return true;+ F$ P7 F* n9 r8 A) U' _
        }
% C1 J, @3 H+ ~8 X/ l5 e        else{
3 B4 a8 X: P: t& z& \1 T                return false;$ Z; o7 l9 v9 _
        }
( q' W& Q& Z9 X, s" c1 {}+ e7 f5 G( E- H% q9 X  h! M
( r1 h, t7 @8 i7 S
int main(){
* S# e( M! h% K        vector<int> v1,v2,v;
/ V+ |3 S8 J- \1 r( t        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
) M. v9 S+ s- L# U: I        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;, H; W3 ]( I4 Q8 G3 B4 q( _3 q+ _
        cout<<"对v1去重:";% `! Z* b) ^5 Z0 I" ^1 Z
        v1=unique_element_in_vector(v1);" d) S/ l, U7 e, B
        print_vector(v1);: v; I8 m! `+ D6 `
        cout<<endl;. `8 o% B2 N$ {
        cout<<"求v1与v2的交集:";( ~. n" X# r. Y
        v=vectors_intersection(v1,v2);- z  r4 T+ G5 ^6 O5 c# b4 Q8 h
        print_vector(v);1 b" c7 I2 m. f. S
        cout<<endl;1 m4 `, C, [$ p% X8 K- d1 x
        cout<<"求v1与v2的并集:";" \' z% }" ?8 f' d2 a1 N
        v=vectors_set_union(v1,v2);; P" S7 x. X' U+ h4 i. M
        print_vector(v);+ c7 n) I* l+ B0 q6 s% i  V
        return 0;/ Z2 Q/ L9 S# _2 y& d+ B, L
}[/mw_shl_code]5 h7 Y/ @& d2 y% Y% m9 d, Q9 B, D/ d& G
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了