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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
6 F$ ^% f7 R9 m6 h) E  B3 h
" X" e" [: \: o7 L. R
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:' ?/ L; J( z& X- p
[mw_shl_code=cpp,true]#include "iostream") E8 r! c' I2 j4 \! M2 N0 W
#include "vector"
  Y5 T( C9 L& G8 x( ~* A" w4 t$ Z8 J#include "algorithm" //sort函数、交并补函数7 e0 c; g' j, u
#include "iterator" //求交并补使用到的迭代器
! n6 m4 ^' q+ m" Y) husing namespace std;+ ]% f% T3 G" |
. i  q( x. n; ?
//打印容器vector
8 o( |$ X% ~' D; M) W  v; kvoid print_vector(vector<int> v){
% a, s4 b) N' a4 D! }+ n$ L6 c        if(v.size()>0){
, L& {9 e1 u6 d! E                cout<<"{";  
. a, Y2 Z7 Q; F                for(int i=0;i<int(v.size());i++){  - n/ @0 K' m% O1 e# M" l' B
                        cout<<v<<",";  
% J3 z+ U0 l9 i5 l, T( @( S                }  
6 f9 C4 B4 }# J                cout<<"\b}";  / x  `% R  R7 U( I' T, q
        }
5 c6 t* N$ [  ^/ m        else{
' [- B- q0 t8 p0 ^1 w                cout<<"{}";
9 ^, H, y8 @0 o& |- [$ ?- ~" i        }
0 g$ Q0 q& p5 {! Z/ M: y  N}
1 \2 ?/ c# d. e' d" `( k   b) p' ]0 m) f
//容器vector中元素的去重
' c- K3 @7 g. h& O. l/ Pvector<int> unique_element_in_vector(vector<int> v){# N' w: Q! n! w1 e' R; |" n- k
        vector<int>::iterator vector_iterator;
5 d4 q6 r9 w& x        sort(v.begin(),v.end());
3 c9 j6 U3 @: K9 Q        vector_iterator = unique(v.begin(),v.end());& S; U6 [, H( Z4 @. _5 @$ q
        if(vector_iterator != v.end()){
+ b/ {7 a3 e' Q( ]6 A                v.erase(vector_iterator,v.end());3 m' h) w; \6 S# x6 A* G7 b
        }- l+ {: n4 ]' Z3 C+ E
        return v;
0 j& S5 J2 e6 Z+ C) O( I, S}
. [- F# g- {3 \: u2 ]( @: _6 ^ ( g5 V+ V% r% j" \
//两个vector求交集
/ a! N; Y7 G) o! c# e) \vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
; f9 L6 e2 ^1 Z7 [* t        vector<int> v;9 b) f7 E" o1 c% v* T/ y
        sort(v1.begin(),v1.end());   + i% w" d3 F  k
        sort(v2.begin(),v2.end());   
' ?; \8 m% |5 m* ~% \        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
7 P1 g- }( T0 W. x! Y# U- u/ [        return v;
* F: {) a0 l9 b) a3 B9 d0 S}
+ d5 ^8 g1 p6 G , h+ A8 n: ~* g9 F/ O, i
//两个vector求并集3 Z: i  f8 W$ F% T# ]& H1 o* |4 {
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
% f- J- ~( r3 M" r, K8 Y        vector<int> v;) R+ e0 q0 S* A* C" R# u" m
        sort(v1.begin(),v1.end());   / l* W  p: f1 I5 f
        sort(v2.begin(),v2.end());   1 j" S- V# N% X
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
3 L0 ~7 ^% I5 h$ w8 d        return v;. R+ V  H; b8 a( `
}
7 ^8 q- S! P) P2 i8 l$ C' a$ q
, ]" x9 s6 g4 g6 m  C! `2 n0 i- b//判断vector的某一元素是否存在
  x& ~- s7 V. V0 Q( ^bool is_element_in_vector(vector<int> v,int element){
7 o8 A: T2 N* Q: Q        vector<int>::iterator it;' }' ]0 D! m5 I3 {
        it=find(v.begin(),v.end(),element);3 O& b4 d9 _1 s" A( ]# Y
        if (it!=v.end()){, A: H3 w1 e9 G# c
                return true;
& |" G& P( |3 d. i        }
4 U& W5 k( Q% o' P/ X        else{4 ~5 t! i$ t) H7 H
                return false;
; K8 A! }4 x1 I" ~        }' K/ y4 V4 P# \$ ^" ^
}
. D! C! A4 F9 L1 a
7 J" r  ^# E7 C/ S: B8 ?int main(){
- `3 c6 s; @: L4 I; O  E        vector<int> v1,v2,v;
. E5 D3 q2 ^& P( A* I3 A# K        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);, e% ?  N+ |) a
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;5 m# z3 w2 r: R1 ^5 w/ V8 v6 p
        cout<<"对v1去重:";
$ T" i0 ~6 P+ t% Q& R4 o% U! L        v1=unique_element_in_vector(v1);7 R! t) a4 o: G" p' Z& l9 @1 o9 E
        print_vector(v1);2 x2 w: o8 R, j: {6 d
        cout<<endl;
: M# S0 \' {+ A: L2 r, Q        cout<<"求v1与v2的交集:";
3 h: ^. j/ p* l8 [" F, z- Q        v=vectors_intersection(v1,v2);
+ y2 Q  l% q3 l, Q* R# r* _4 j        print_vector(v);
$ U$ M( E: H8 W& v. y3 U2 i7 `! M        cout<<endl;3 j+ m7 N+ b' N7 Z
        cout<<"求v1与v2的并集:";- q1 Q# q; B) `
        v=vectors_set_union(v1,v2);3 A, T: o# z& Y
        print_vector(v);" f% O6 q/ v2 w5 \
        return 0;4 g+ ~0 K9 @4 C
}[/mw_shl_code]
7 m, T& B% ~) G2 K( K5 q5 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二次开发专题模块培训报名开始啦

    我知道了