PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
. F& a, _! Y1 A8 g% Y6 y$ B6 i
7 b$ x) T8 ^8 G( q# |: z7 r. A
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
6 v4 m1 ^( n" m3 P[mw_shl_code=cpp,true]#include "iostream"- n" R2 K! @( J2 {
#include "vector"   d9 S. x. {- Z2 y1 w7 h! p; ^
#include "algorithm" //sort函数、交并补函数
0 s' N  X& ~$ w; O8 a#include "iterator" //求交并补使用到的迭代器! F8 ]) H( ~5 X
using namespace std;: k# N" H4 o8 A" q! m, O; ~

  A  O4 b5 H4 [2 E1 m//打印容器vector
' n) q$ @5 u9 y; b( hvoid print_vector(vector<int> v){
9 z6 p" L* Z; J% J  L6 S4 i2 D% |        if(v.size()>0){
  i7 F$ B! m- g                cout<<"{";  7 n1 `: l2 L  f7 P1 \  W  ?8 Z4 F
                for(int i=0;i<int(v.size());i++){  
2 @% E7 B# z" o6 k, e                        cout<<v<<",";  " I9 a* o" D! j2 m4 U
                }  $ c. K6 ~4 B6 S1 l
                cout<<"\b}";  
6 h3 H+ a% {) D) M! |7 D) H        }* H' [6 \) s/ [) f# I& B
        else{* A' Z2 q+ W4 n2 k* U* y3 j. n
                cout<<"{}";
) m9 a5 g6 H$ i8 S) {/ O' u        }
( \" ~( v" b- v4 v0 {}
( [& Q4 e$ A8 G  c& D! T
. r# \9 m9 x, ^: _9 _0 @//容器vector中元素的去重
* D+ I0 b) j) Q7 K7 lvector<int> unique_element_in_vector(vector<int> v){
0 f" J( O* ~% F9 A1 L* y        vector<int>::iterator vector_iterator;
- ], H' Q  x# v! l( \        sort(v.begin(),v.end());
4 N0 y/ y. `6 {+ C        vector_iterator = unique(v.begin(),v.end());
/ L) ^  F  q$ ?+ Q  m        if(vector_iterator != v.end()){
: O: b* y5 s+ W- Z5 V                v.erase(vector_iterator,v.end());& g' V) {. T, S1 p) I; P2 e
        }
& Q. i; x" z% v        return v;# o$ q! E8 U6 a8 j! t
}
. _7 b* [. X0 s, n- I, }0 r. A0 z- J# W * A$ v, Q; Z. b# {4 D
//两个vector求交集! M. h6 R  H* r0 h4 S! O+ o% B
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
5 A7 q/ a  `% u& e* s) ]  p        vector<int> v;
* N  J$ Q9 x8 x; V7 ~3 x        sort(v1.begin(),v1.end());   , Q( W/ m1 d) O7 f% \3 o- i
        sort(v2.begin(),v2.end());   
2 ^7 C8 e, L, O* g$ l: Q5 E. h        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 h6 M; L. k- A% k  {3 @- n        return v;
/ L- ]. ?* G* \, Y- `+ y" ^}
$ Q' |4 ~3 i1 W! C( i3 R
' j% c  ]* I( e  _" J//两个vector求并集( A" I! v3 G; K1 T6 \
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
- e# J8 H8 _3 ~6 ]0 @        vector<int> v;
2 |5 k9 D0 r2 H# {6 F+ Q        sort(v1.begin(),v1.end());   8 h- ?2 @8 i2 ]. |
        sort(v2.begin(),v2.end());   
4 {* f+ Q1 V( b* P& ^        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ( K( L" F! a. W- I6 a7 _
        return v;. ~" y- h- H- \$ w. Z3 D
}
2 [$ i$ E' P! W# h. F 3 }8 \! `6 V3 C) M! y
//判断vector的某一元素是否存在
- G. H1 G3 X/ d) ?* N% f7 Ebool is_element_in_vector(vector<int> v,int element){; h3 f5 j  s4 f6 ?: ~* G
        vector<int>::iterator it;  q! M7 N% o5 N  j
        it=find(v.begin(),v.end(),element);, c5 p/ ]( O6 L6 Y
        if (it!=v.end()){2 N4 T( _- I, i" |8 N8 K3 l0 i
                return true;
0 p; u5 t) p+ q( f* P! D        }
9 b! i+ ]4 l# q4 R        else{
- j# D3 W! z( o$ {7 [) P) [9 Y                return false;
* e0 I- U/ Y( Y# f4 T$ L* R        }
. i8 g' E9 L) ?}
$ t" j6 D4 ~7 M0 g0 y & g; a# a8 Y  J; R
int main(){6 h% d; d  t. }2 q
        vector<int> v1,v2,v;+ |/ W" i) i. i7 s( {
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
6 F: x2 \2 H  x$ }        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- L0 S& y1 A8 H
        cout<<"对v1去重:";' q9 z) A, |0 U* j2 u# ^$ s
        v1=unique_element_in_vector(v1);: r1 K! C* y: i5 C6 U
        print_vector(v1);* b0 N& ?5 D1 h1 S6 M" R, R
        cout<<endl;& P( F( t" A$ H# G- o
        cout<<"求v1与v2的交集:";( @) \" L/ a- _& P1 s9 t& a2 F
        v=vectors_intersection(v1,v2);
0 e6 g1 y) B; N  [. ?6 ]) D        print_vector(v);
% v0 X5 B7 g: ?9 S% E8 X0 T        cout<<endl;
2 `5 y- ~, ?. J% A, D        cout<<"求v1与v2的并集:";
' s8 a  Z. W. X% o; N        v=vectors_set_union(v1,v2);) s# N! m  i+ q
        print_vector(v);
: R6 N+ B  [; W        return 0;, t/ A' U6 m+ U* m# I& }
}[/mw_shl_code]
- r" i: k0 `9 |; k3 O4 k4 Y
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了