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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
/ h" j1 B( w# _
0 M- w3 _+ u* f. ^
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
/ w! Y# Q& B6 r' i. d[mw_shl_code=cpp,true]#include "iostream"
$ w' Q7 D' O8 |1 m; y1 A9 Q' t#include "vector" 7 v! z  V/ F1 t1 I' a7 A
#include "algorithm" //sort函数、交并补函数' I- B+ C: j3 q. O, C$ x& O5 C
#include "iterator" //求交并补使用到的迭代器9 |0 H( K/ Y+ g; Z0 D. c- T
using namespace std;% i4 w0 p9 [% D" f0 y: j
; d# a  P. C2 G7 B$ \( C2 G
//打印容器vector
8 q! a9 _  b' r3 f8 i) C1 ?void print_vector(vector<int> v){" H: X% Q( r( m, b# t1 @. Z
        if(v.size()>0){0 J* o1 M& j0 B5 I- t$ `
                cout<<"{";  
! S" M. Q/ b: B. [  k$ Q2 E/ }! ?7 x                for(int i=0;i<int(v.size());i++){  
8 c0 C* L: X6 w/ `                        cout<<v<<",";    ^+ r5 H7 K* |
                }  7 b& A! n; Q! E9 ~9 S
                cout<<"\b}";  
; K! M/ x0 _' ^9 c7 G- E$ k' ]        }
; @( W% Z/ M2 H2 J) Z+ b        else{- v3 I3 R0 O' d, i
                cout<<"{}";
+ E3 R6 D0 Q4 Z        }  X% M$ Y" Y3 R9 L
}6 d$ a! k6 P  N  b& @
* R3 _$ A. r3 Y+ P* g
//容器vector中元素的去重! K. }0 d  C; |& n4 m& k
vector<int> unique_element_in_vector(vector<int> v){
& d/ o* Q0 E3 |9 G7 {5 w        vector<int>::iterator vector_iterator;; H, Y2 w3 ~1 c0 l9 G# s% b4 q
        sort(v.begin(),v.end());
& Z" _: s: w% Y: @* y, m2 h. Y        vector_iterator = unique(v.begin(),v.end());
& U3 Y$ T/ h1 e0 ?5 ?9 H        if(vector_iterator != v.end()){
: F+ p! r2 X% |. n" A                v.erase(vector_iterator,v.end());
2 J7 f. Z) ~! r( b        }0 K1 @" d/ A* M! Z  s9 f
        return v;/ D1 Y2 G3 E+ Z# ^* z0 o! v
}
" @& @$ E6 q/ n' c
* K! e% k/ i# d8 C% V8 J, x/ S* P//两个vector求交集
7 [$ \/ e- ^0 `) [! U, Q* I6 r7 ovector<int> vectors_intersection(vector<int> v1,vector<int> v2){# S$ r  P. V- P5 s# V" A
        vector<int> v;! `6 M1 h' X7 [1 Q, ]% b& o
        sort(v1.begin(),v1.end());   1 D7 X+ C+ J% L, U
        sort(v2.begin(),v2.end());   
' m# [) \8 i+ k" ^        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 * [* S" F: B) s; ?1 [
        return v;
& E( q% ^* Y- s. a& V}$ V9 l0 Z5 p) {$ J! j
& O, q! Y. S/ {$ s- z/ H- T$ z0 w9 b
//两个vector求并集
) y. v: z3 u# o  {vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
8 o/ H) O/ _& |. m        vector<int> v;
& a! x- \$ C- _0 `7 J        sort(v1.begin(),v1.end());   
/ E! N; w+ I$ L3 F' V0 b        sort(v2.begin(),v2.end());   8 k# X% Y, b& ]# v
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- J- Y  p0 ^4 \% F- t7 n" B* t        return v;4 Y3 X% n) N" M* r
}
; o0 ]7 V' n" e. N' |: l7 h9 r
; c, n+ O6 t' a: n' {. I//判断vector的某一元素是否存在5 R; ?$ w; D7 j0 J( w" x! ]1 C
bool is_element_in_vector(vector<int> v,int element){, T7 _5 J" Q3 d
        vector<int>::iterator it;
9 K5 ?! }' z' l6 `  D1 K6 l        it=find(v.begin(),v.end(),element);
: g2 j3 W* j! w2 j( E( u        if (it!=v.end()){
( \& ~' Y1 s8 [8 g                return true;' ^- `: z/ D  I) W& ~
        }  B* @# l9 g$ Z' F/ s. b
        else{/ J$ [% I% |* [
                return false;# e  t9 U5 c* _8 D1 h2 M
        }9 Z8 y, t. B$ z* J
}6 K/ Q3 \2 Q! x8 Z! }3 W. y

, k  V9 X( T  k5 s* Bint main(){
8 }7 h" f+ U5 c& x  _        vector<int> v1,v2,v;' w0 M) l1 b8 u' `2 c: i& _
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
3 n# o: `. v/ Q. H1 G$ L# M. ?        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;5 h9 M' `& f' y
        cout<<"对v1去重:";
* Q( `: O2 v) W" }: p        v1=unique_element_in_vector(v1);
' n( x: J) ?% I# G        print_vector(v1);
. I3 B3 m$ _4 N; p8 D1 z! a        cout<<endl;# z" {7 D/ Q& Q) H0 T* ]$ B) k
        cout<<"求v1与v2的交集:";& E4 L/ j! l0 Y# k, Y% ?( R. L
        v=vectors_intersection(v1,v2);
9 q, e4 L2 Y: Z  q8 l/ r        print_vector(v);
' N4 [) b% v+ g- N        cout<<endl;
4 i9 T1 s7 J% R8 \& C& G' u        cout<<"求v1与v2的并集:";' g# u4 a! t. F/ I& j
        v=vectors_set_union(v1,v2);
, ]; x$ u7 O/ e        print_vector(v);
- N6 m# \9 T4 u! ]% e        return 0;7 T! S, g4 N) t4 h( l3 u3 z
}[/mw_shl_code]
9 ^& v+ P1 A3 }% x
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了