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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
5 e+ ^3 T& R8 _  M) D. a/ F# ^
0 ]9 z3 t( P5 [3 H0 ~
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:. \" ~3 Y( ?, @! S& f
[mw_shl_code=cpp,true]#include "iostream"
1 ], R2 I5 G  O#include "vector"
: {7 ^3 I& q: c% O# c% [6 N#include "algorithm" //sort函数、交并补函数
) k$ w1 o" P# d2 f$ N#include "iterator" //求交并补使用到的迭代器9 j8 a8 Z  M6 \* {; S& Y. A
using namespace std;# O% H0 w. I" Y. |& e

8 m+ O" c/ A+ C- b& W9 v//打印容器vector
# c7 l- _* L& J  ]void print_vector(vector<int> v){1 C2 G$ v! p* V, T& q6 s# D
        if(v.size()>0){- d& |0 Q5 g! x9 v/ Y
                cout<<"{";  
( ?" N+ b8 l! t% Z; b! R5 v6 b. O                for(int i=0;i<int(v.size());i++){    P# Z! U3 p2 N+ S3 w9 b
                        cout<<v<<",";  
4 b) K! A( r. J. i  i9 |# d                }  
8 c+ y- t  w# ^) K7 ?; h                cout<<"\b}";  5 q' ^: I$ {# I4 I0 X2 ]+ B$ E. Y8 M
        }4 J+ O& \9 W! b( e; ]  U
        else{
3 s! O" E) I. ^+ e* Z                cout<<"{}";3 R. t& W% U8 Z" Y
        }
( j! u) _  t. H* s) N}
! R9 C/ I( s% N$ [ 2 W! H9 _; n; ^  G* I) k
//容器vector中元素的去重# {9 _' h9 }" R& f; u! b! w
vector<int> unique_element_in_vector(vector<int> v){
( o1 k" B; ?6 o$ a. [        vector<int>::iterator vector_iterator;
3 o; z' L2 I+ c% m# P+ f; C        sort(v.begin(),v.end());9 u7 ^! l" k2 U7 r
        vector_iterator = unique(v.begin(),v.end());$ N7 r0 H, i( P0 g- M( [4 P& W
        if(vector_iterator != v.end()){
( V' h# T. U/ M/ u4 n                v.erase(vector_iterator,v.end());
1 ^* t3 k2 i# Q: t7 r& a        }! Z$ P/ H$ k5 w# M
        return v;* N" @* H* ?2 d4 z5 h
}& E1 Q. D% H  L* Z. p
6 U1 g7 J8 ^5 k3 t
//两个vector求交集
" G/ n* J6 U$ r; b& ~+ ]+ hvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
' Y& a6 [! m3 r+ I$ T- Y        vector<int> v;
4 ^! p- k. _$ D; ]        sort(v1.begin(),v1.end());   
; }- b7 z& J% u; D' |2 g+ N7 h, G        sort(v2.begin(),v2.end());   5 Q# o: v( J; v9 ?$ w9 U1 j
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) ^# e8 e, h+ D( ~  \8 B4 o6 W        return v;% U3 e9 a/ `! P* j9 j
}" X2 [' J% W6 ~4 W3 {: s+ J; Q% N

; V; l7 c; I9 c" ^3 Y( G0 b" A- Z//两个vector求并集; S9 E: H' w0 W: y; W- z
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# }! }0 U* I" D; q8 B6 y9 d        vector<int> v;
2 f, l% h# @2 J) f, r- B( W0 R        sort(v1.begin(),v1.end());   3 B* `& |/ A+ {2 K
        sort(v2.begin(),v2.end());   & l, y4 X6 `  d) v6 h. j
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 . ]0 F  V* H' d/ i+ a/ [
        return v;
6 f0 B& O: m5 V4 A5 c}! [/ m2 i7 n' _4 U/ d
+ E1 t4 _4 M6 H* ]! n
//判断vector的某一元素是否存在+ }; w& C2 I3 g" Z& {1 f
bool is_element_in_vector(vector<int> v,int element){, r) n; o  N7 G' ?% Q
        vector<int>::iterator it;
0 j+ z& D. g  T1 T8 y/ Z        it=find(v.begin(),v.end(),element);# `5 F2 O2 _/ f/ i- W* Y
        if (it!=v.end()){) P6 i$ y5 c$ G
                return true;
) U" L& [% b2 K. r" ~* [4 m% I        }
2 f* c1 ~- w9 G        else{; a' I5 A* i9 y$ \  F3 X4 ^" D
                return false;  n$ @* s; b9 I
        }
% J* o2 Q" s6 z1 t8 W, \}" G) ]& Z9 h) `- N
- N& N9 O4 f, h& E
int main(){
, Y1 h! M: N% X        vector<int> v1,v2,v;) H3 k8 k8 z2 t: P3 F% P
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
( p) J; r; Q) t) `( N: I9 P        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;% R' d, ?+ N/ l; H6 n% k. V
        cout<<"对v1去重:";
' `9 D# q# `* z5 {        v1=unique_element_in_vector(v1);
7 s) C# \  X+ b$ V' e        print_vector(v1);# d: ]6 p+ v. ?: u3 G/ w
        cout<<endl;2 `7 ]0 s1 F% }. Y  ~' [) ]; v; S- [4 n
        cout<<"求v1与v2的交集:";' N$ H$ T  _& W9 K; A+ P$ r: s' U
        v=vectors_intersection(v1,v2);: I( X5 j0 }: s1 n# ?; n. l
        print_vector(v);. Y& D( s; R* N2 Q: G+ E1 b! Q- O
        cout<<endl;
6 r" c, x& w9 n3 Q' q; {, \: D        cout<<"求v1与v2的并集:";7 t5 l9 k7 m% c( @1 }: {% B' ^
        v=vectors_set_union(v1,v2);4 |# N  l5 p3 j4 Q2 F! H/ m6 e. M
        print_vector(v);- t( R2 M" i0 e* p
        return 0;
" b* c5 m0 \, j. L) E}[/mw_shl_code]" M  A& S+ d0 p! ^( U
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了