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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
. o" U( X& v; V+ V6 L

1 B! }6 Z3 e# r! i7 ]1 @* }C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:* ]# t4 p, q) c+ ]6 d  o( Y4 w  w  J
[mw_shl_code=cpp,true]#include "iostream"
; m& J0 H. M. d7 P" L#include "vector"
; f/ l: \8 {, c" E, u! j' N#include "algorithm" //sort函数、交并补函数/ P: F% R' B5 Y6 ^+ x' |  C
#include "iterator" //求交并补使用到的迭代器
$ L& B) y0 E- }* l$ lusing namespace std;; J1 J8 u7 D: y

4 D+ X5 `& l/ k% ~/ ^9 @6 g//打印容器vector
0 l+ f7 w9 v4 p" x* B+ evoid print_vector(vector<int> v){
4 c; ~( d( T. `9 I  L        if(v.size()>0){
& Q! }! |, A/ l0 o4 T5 ?  v                cout<<"{";  ( q( E1 X$ j# J, `4 k: g$ D
                for(int i=0;i<int(v.size());i++){  
- L- k) m/ v2 l! a" D) x6 Q, q                        cout<<v<<",";  ) s0 _! E; a# Q: g
                }  / `2 \; H8 w- L0 V- k+ `8 a4 E
                cout<<"\b}";  % d* S; I5 M. z" o* Y
        }+ S' N# }; \8 A) j3 `, P# P
        else{
" Q; I& }' K% z) u* U                cout<<"{}";
: r0 U  s2 h# p$ p. l  Q8 h        }) t  `" f. e$ I: |: v9 J
}
% n5 h- x* d3 H. W* n* E; u # K1 G& U# w6 x/ \
//容器vector中元素的去重9 u+ s5 r* f: L4 n  ~! {- U
vector<int> unique_element_in_vector(vector<int> v){
4 H8 k, k6 S8 v! L3 Q; w        vector<int>::iterator vector_iterator;
6 n3 D% j- }/ X2 I' W$ Y        sort(v.begin(),v.end());
$ m2 b) H9 Y( V/ O        vector_iterator = unique(v.begin(),v.end());
' u  h- x. @! y8 X! R        if(vector_iterator != v.end()){- O# s$ O0 P4 o4 w! K9 V6 @
                v.erase(vector_iterator,v.end());
/ }: T1 ~" G4 ]- `% x# [8 x        }
: m. `+ N% u) U! ]* R2 ?        return v;
1 `, h2 C8 ^& z}- v6 O1 \. X' x/ V* J, g% h  k
! Q6 D( K; B9 m; F+ b) }! J
//两个vector求交集
& q# ^& f: Z2 {/ jvector<int> vectors_intersection(vector<int> v1,vector<int> v2){" n$ `9 ?+ V9 @5 v- s6 x; V! i
        vector<int> v;
4 ^& l. j, |7 f  X! I        sort(v1.begin(),v1.end());   
( x9 C  M# n. k2 K: Z& K# L8 g        sort(v2.begin(),v2.end());     g7 `4 r( s8 g" l7 k* }% `0 ]! ~
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) j+ x- V7 a7 i* Q1 E# C# f& Y        return v;: D, J2 c9 q# E( ], m
}
# U/ a2 s( ?. h& k8 i6 F9 `3 t
1 @  C! a6 J) k, k- A//两个vector求并集
7 ^5 G! I. o" T3 p9 m8 tvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( s. ?5 g8 o9 H- h! p        vector<int> v;- |/ Q- [+ M4 v8 {# L, y8 s3 t
        sort(v1.begin(),v1.end());   
8 T+ q6 a* y  ]! _0 W1 m        sort(v2.begin(),v2.end());     j' J# t" g6 ^$ S
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 - O. T3 c0 ]( X  L& J8 }
        return v;
# V8 F& Z" s; P" w& ]}$ ^+ l$ p3 l( P5 |! T# I+ Y

1 D' P, b* q3 j5 w* L//判断vector的某一元素是否存在
7 x/ |& a8 C. t; ~8 zbool is_element_in_vector(vector<int> v,int element){
+ P. f' P1 F1 k+ {( O& q, X6 p        vector<int>::iterator it;
8 X' S! c! e& _$ z, X; a        it=find(v.begin(),v.end(),element);
1 ^) U$ `, c1 v* `5 D% Z0 u        if (it!=v.end()){; M( T! g" Q) H6 @9 R
                return true;8 X6 P9 |! @0 M" _& q) ~9 O
        }- u+ I, a. d2 M$ {+ |
        else{% J" I  _8 }  i/ p1 c
                return false;
9 }. F' O+ N$ H, p0 r        }
& r% X; [: V8 |2 f1 G/ k$ V}6 F, O6 v' }1 l+ j5 a1 T

) a7 h$ K# u0 Z2 Oint main(){: a, [0 z5 N! }& {, U% a9 s
        vector<int> v1,v2,v;% M& D( w( J7 A" z7 j
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
9 h/ E2 F& @4 \2 A2 G! V4 f        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
6 X; r" D/ S- y7 S: r1 O        cout<<"对v1去重:";! h4 ~4 x% h. E% R
        v1=unique_element_in_vector(v1);" y; s+ x: E, ]7 G' a" d2 g
        print_vector(v1);
3 i' n1 G( M+ W, I" v: `! r: {        cout<<endl;$ L! c7 R5 E5 m# p/ K9 G
        cout<<"求v1与v2的交集:";
- T0 }  c3 H" \% N, \* T        v=vectors_intersection(v1,v2);
2 Y6 I/ Q! z0 N9 y1 X        print_vector(v);+ f/ s0 m1 r! ^
        cout<<endl;9 d; ]; n0 K. ]2 S) T
        cout<<"求v1与v2的并集:";3 y$ H, S) W% q% ?" H, u, l
        v=vectors_set_union(v1,v2);
9 J2 M) c& x% U# h        print_vector(v);, q, G" J0 y$ N, H8 G
        return 0;/ R: U- N0 Y& C; c3 P
}[/mw_shl_code]: {5 f% V. I: F1 v$ X& s2 F
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了