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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
) W7 \- k* ~: z' x) {3 h" J) ~# \& Z
. e9 ~# {) j& o1 G
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
$ q1 B1 c2 \5 R! c' V3 u[mw_shl_code=cpp,true]#include "iostream"  c/ [+ I$ j3 c
#include "vector" 8 F& S6 [  e/ ]3 f4 H
#include "algorithm" //sort函数、交并补函数
3 e/ G1 R1 g# c( Y' z. o+ @8 C- e#include "iterator" //求交并补使用到的迭代器
: m$ M( O% H# u- lusing namespace std;% R( w5 o4 Q$ x; z
# ~- i6 D; ~+ V- i
//打印容器vector. q) D$ t9 u, i, x5 `$ [4 |
void print_vector(vector<int> v){& K$ @' F, J2 M' ]
        if(v.size()>0){
$ m( r. X3 X. r. R( B" T9 E' [                cout<<"{";  
1 [6 |- Z9 {/ J! J( v9 B                for(int i=0;i<int(v.size());i++){  $ [' W3 J9 x- X( @% E/ R
                        cout<<v<<",";  
9 n$ Y/ Y2 J; R                }  5 O) k: @% ~7 b) }0 K( S9 J
                cout<<"\b}";  
+ A# x9 F/ M- q- b  I% v8 V0 C        }
; P1 V/ Q0 F$ `7 D+ g# J        else{- J, g* {5 o3 H9 y
                cout<<"{}";
0 v' o) C' V, l; r        }1 l# g% A% e5 R% X( J) W
}
- _+ E4 M- P3 p. H8 x7 E- K2 m
4 Y! c- g" ~6 m//容器vector中元素的去重$ g/ g: j* M5 ^
vector<int> unique_element_in_vector(vector<int> v){; e* h& A# k# ]; z, l5 Z  p. T3 \' y) g
        vector<int>::iterator vector_iterator;
% I) G' o, d% j  B" h* N, p        sort(v.begin(),v.end());2 S- u" X, F7 Y: z0 P. Z
        vector_iterator = unique(v.begin(),v.end());! z6 V, J: {6 y) m
        if(vector_iterator != v.end()){$ r) N$ J- K9 i8 i' x, x: ?
                v.erase(vector_iterator,v.end());! r' L2 T7 ]" C: C2 e+ [1 W
        }+ e+ U6 b5 `% I: Z1 N& f
        return v;
! `) ]. [$ c* b( R) w, B}
* w. }3 y# y8 Y- y * Y) M2 ~7 b7 K+ D$ B( p
//两个vector求交集
  u; B; Y! ~) f- j8 N0 ~8 Gvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
" m/ C2 g9 W% s0 A- S2 d* A        vector<int> v;
* b% f/ I9 U' M5 L1 v! x        sort(v1.begin(),v1.end());   
7 P% l* ^. C# Z/ ?$ r) S        sort(v2.begin(),v2.end());   
1 V( h9 a+ [# a9 m# T& x$ Q! s6 I7 E        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 5 e, p8 B$ X. L  f7 e" T' ], w
        return v;
. X( N2 i& ]% O$ g$ ^( L& D( ~}
/ l1 M0 o6 t4 u  `0 `: p/ J
' M2 X* ?: e; p1 v9 |//两个vector求并集
5 ^4 v' y4 S1 i  Q& k# Ovector<int> vectors_set_union(vector<int> v1,vector<int> v2){
$ H4 `! ^! o. v  }" I$ j        vector<int> v;% ?( _3 G* G2 a, d% J/ z! W# D
        sort(v1.begin(),v1.end());   
% \. _) M% o% a: U8 d' g7 s        sort(v2.begin(),v2.end());   ) z7 k4 Q3 M( t. ]6 w. w, x
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 # a# x  H* w9 A6 l5 C0 e' Q: J
        return v;
8 C6 _" J( K1 H* @6 h! h# {1 R}2 h: c" Q5 v. F1 d) v

# L* q) {' J2 _7 I1 d; k6 T//判断vector的某一元素是否存在1 T1 u$ ~% Q1 v% h: U
bool is_element_in_vector(vector<int> v,int element){
8 ?9 K% z+ b9 N2 e( y) M' s        vector<int>::iterator it;
. x8 l( u* }) C/ T$ ?8 Y        it=find(v.begin(),v.end(),element);7 t! a4 Q# x$ ^" F
        if (it!=v.end()){
* J/ ^+ T0 o2 d                return true;8 \' N, p* g- x9 U  q1 ~( r
        }
$ d/ `5 C2 l' r/ u+ L8 x! o0 p; `        else{% k, o6 n3 B8 C6 a
                return false;
* y; A& k- ]9 v" r' S        }6 |2 t: Z* M) R. I/ x) m: S5 a& ?
}
1 y; i; i7 q8 x& U/ q# T / i+ C# _6 l5 ~1 R6 z+ g5 a% \
int main(){
9 q. n% ^% J( R1 K8 w0 I        vector<int> v1,v2,v;
2 h. ~4 n9 q3 ?; g% s        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
3 e3 w: ]* G* x- A        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;6 B4 V) a# K" B0 w4 S$ m) H6 {
        cout<<"对v1去重:";7 |( _+ T" k3 N3 W# q3 P9 ^
        v1=unique_element_in_vector(v1);
/ G; W: I9 W: i        print_vector(v1);
4 u6 D& H. f0 Z7 p9 B( ?( q3 [5 X" T        cout<<endl;
4 f, x8 Y8 g# \! S1 ]: L2 X+ `9 @0 O        cout<<"求v1与v2的交集:";) p# f! H* M! [# J: a! h1 {( J
        v=vectors_intersection(v1,v2);% x0 U1 n8 K( [. C8 C: t
        print_vector(v);7 I1 C# n9 h- K' @9 n& e3 |3 X
        cout<<endl;" ]8 G) {0 l) N2 S
        cout<<"求v1与v2的并集:";
2 C+ z6 A- g5 Y  o        v=vectors_set_union(v1,v2);
) G5 |  [) a* D8 X7 x- B        print_vector(v);
. v( ~- a1 l- C' N        return 0;
/ a$ ?1 N2 m+ ^. s6 w  G/ j}[/mw_shl_code]
& `; z# P* w: o; N; H, K1 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二次开发专题模块培训报名开始啦

    我知道了