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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
0 T1 ^7 j; o& q& O
9 d# \  d4 O0 L: P0 O% z7 `  Q
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:' P0 R, w4 |( N# P$ j
[mw_shl_code=cpp,true]#include "iostream"$ |; r9 A  r8 \% P( s: t( @. m
#include "vector" 0 R( Y( g. [. Q- g2 a/ t, ^
#include "algorithm" //sort函数、交并补函数+ Y+ ?! `6 @, g* s( O% Q
#include "iterator" //求交并补使用到的迭代器
7 W# T! q, N5 `7 v* susing namespace std;' `0 s1 B! [! {2 s
& m# H# C" m* d! R/ x( m! B8 ]
//打印容器vector) w6 a: H# r& w' a, I, u
void print_vector(vector<int> v){
: ~" w/ ~% v3 B! ?        if(v.size()>0){
! f+ x5 N# m* V; e, O                cout<<"{";  . j/ s; O  q% N9 d9 h& ~
                for(int i=0;i<int(v.size());i++){  
. q2 L  n& Y( V! }2 W8 q# C. p                        cout<<v<<",";  0 Q0 l2 s; Q: W+ \, T
                }    N# ~0 q2 t# q+ ^! ?) J
                cout<<"\b}";  
7 A& i5 b9 Z) i5 j  d# A8 ?9 P6 \        }- Y4 s  ^% e# Y$ P6 O' [7 A3 {7 t
        else{" ^4 E5 H/ [  b, F! ?
                cout<<"{}";
4 ^) o8 T( P& R) [        }
7 T8 V9 P9 K1 i2 k  w$ v0 L}
0 ]: F4 t; k* v+ K
1 ?5 O8 A! h0 m* ?6 a; X$ k//容器vector中元素的去重
" e( e7 ?% h& v& cvector<int> unique_element_in_vector(vector<int> v){
2 j6 I* x! }+ H        vector<int>::iterator vector_iterator;
( U( O0 S( ^6 {' x, \        sort(v.begin(),v.end());
; C& r+ q% _' d5 I2 R        vector_iterator = unique(v.begin(),v.end());
9 P8 U* Q9 Z. u        if(vector_iterator != v.end()){
) \2 Q( q1 K$ q+ J7 \8 L6 T; ~                v.erase(vector_iterator,v.end());
, E" g  x+ L( c        }
+ W4 Y/ x! F2 f        return v;. {1 c# {8 q  _
}6 `; D" F" l4 ^& l: m

9 B7 |1 I) F8 g9 L//两个vector求交集2 x7 M' z) M) e8 X. k5 N; L
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){+ `+ W6 X7 {* Z& h9 x, u0 S2 ~+ j
        vector<int> v;- z* _9 L: m. ?8 [( i
        sort(v1.begin(),v1.end());   . a7 `/ p9 ]6 G* m% V
        sort(v2.begin(),v2.end());   $ h7 O" C4 }1 ^# A2 W9 a  {
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
2 Y+ P) g% a% }        return v;
2 }1 [( E' M, b$ \% {5 z- y6 n}
1 E; s) {; Z, p/ b) F# h! v  z
! i4 c2 T8 K8 Z; }( K//两个vector求并集7 c$ d1 {9 ?8 \# r% a) ^$ {
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){# S1 g( x$ L& B3 L
        vector<int> v;
3 F7 ~* _2 N! o: y        sort(v1.begin(),v1.end());   
- N3 ]9 r+ R/ K* P% T* L# R        sort(v2.begin(),v2.end());   
/ D& D: {2 r( d6 ?0 g% O1 J* p+ w        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
- G6 E3 b& u1 n$ u* V+ v8 a1 X) t        return v;  {$ m& t) x, @
}. b3 F  {' |( C6 `

* O5 R8 g# n; }7 S+ `7 B$ Z6 C/ m& d//判断vector的某一元素是否存在& M, S/ J6 u2 g2 j( G/ Y) U
bool is_element_in_vector(vector<int> v,int element){
2 |" e2 w0 w% G; P1 k& Z        vector<int>::iterator it;
% D$ y' x6 ]; \8 }        it=find(v.begin(),v.end(),element);+ E* s3 R& C' F: \$ a
        if (it!=v.end()){
  c1 `; J7 m, `7 q0 Z; Q$ ?                return true;
  k$ L- Q3 g4 J        }
5 g1 P0 n2 p- B% u9 m5 h$ W        else{
3 q! L1 F$ h; Q- h& f* O; j                return false;. Z. Q8 ]2 A" t; X$ V5 j$ A3 U
        }) T/ L# _- h: `5 E* W  Z/ g8 W: s
}" k3 N& E; y, _8 |+ b' a" s
! D( d# W/ r3 R1 C
int main(){) X8 B% P2 G, }+ h- W' W
        vector<int> v1,v2,v;  N7 j5 U& C+ \1 |# M
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);4 b* A" j! A  H( f
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;, C- Z4 ]8 m9 c8 I. Z- W0 K
        cout<<"对v1去重:";) ^' Y5 D7 L6 r0 ^4 R0 u1 Q
        v1=unique_element_in_vector(v1);$ X0 C: w! X( R
        print_vector(v1);, H1 M7 O$ m2 s. V4 P3 Q
        cout<<endl;
8 p- Q7 i5 d4 `        cout<<"求v1与v2的交集:";
9 `2 q8 f2 N# z2 r3 W  J        v=vectors_intersection(v1,v2);
6 F, Q1 x0 Z4 M3 w  A! T( \        print_vector(v);
* ^' Z" j! ?+ J2 h% F3 E6 {" ~        cout<<endl;/ \# K. k8 X- s
        cout<<"求v1与v2的并集:";
7 E; x. O1 ~- P' {2 a        v=vectors_set_union(v1,v2);
3 W% `7 |, j5 O0 u8 b. @' {/ n        print_vector(v);) q- f" g* r2 q+ G
        return 0;
5 b6 O9 [; C8 ?1 k( j7 w}[/mw_shl_code]" Y9 C7 D, t. N
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了