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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
& t9 f4 u) L: A4 V5 j; G* H! t. y
0 k1 a: L' I2 t! V% `4 o8 T5 P
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:# f1 A/ N3 X2 T/ r7 e4 ?
[mw_shl_code=cpp,true]#include "iostream") s: H5 F8 d) N- ~& }
#include "vector" $ V( _; u. b3 e# W) [) d3 ]
#include "algorithm" //sort函数、交并补函数. ^+ @6 M5 P$ {+ U
#include "iterator" //求交并补使用到的迭代器
2 M7 k1 y. A* J# w3 @3 [using namespace std;- }' P6 o. A5 [8 m* [3 V0 B

- ^( D  p# C+ s! B  @( V//打印容器vector
0 y1 q! z& h/ K5 l  K1 x" ivoid print_vector(vector<int> v){
" S! x& Q& F% x) [8 X        if(v.size()>0){
$ c' O) m1 m4 V' c9 U* V$ ]                cout<<"{";  
0 I' l0 N) r. p+ q5 R" d                for(int i=0;i<int(v.size());i++){  - f. B/ p; `1 J7 q' I5 f( q
                        cout<<v<<",";  * q: Y& j& [/ @8 V) B+ Q
                }  * t8 `7 R$ E  f- a! e+ n
                cout<<"\b}";  
  M' j  P# f9 w3 ~3 B        }2 }* A+ J: m) a! Y+ d) ?  N! H3 W
        else{
3 v$ q# ~; P- l                cout<<"{}";0 D( ~7 ^$ h3 ]1 I8 N3 {
        }
  W) `, ~1 k" E7 ?& ?! p}7 g4 `- u! ]; s; a7 @& }% Q  E& I

! g& r1 q8 T2 n7 f, G//容器vector中元素的去重; k; [: E3 M5 W; c2 O; |" x0 J" r
vector<int> unique_element_in_vector(vector<int> v){" p6 ~8 K- n! a% l5 j
        vector<int>::iterator vector_iterator;4 Y- F; V% \1 C% D
        sort(v.begin(),v.end());
5 F6 o5 r1 C' Q# L  y% ?; W        vector_iterator = unique(v.begin(),v.end());8 @& n5 N" `( X/ {
        if(vector_iterator != v.end()){
; Y# y* h/ B+ q8 z' v# C* u: @                v.erase(vector_iterator,v.end());4 n  L  e$ T8 |6 T) {
        }
- U4 _; `0 q$ L+ i# t# B        return v;# ]& }3 o" h* u  N% o1 g. |
}
; ^( i; J' |% ], ` . z2 ]7 U2 g8 c9 O; J
//两个vector求交集
% y2 n. ~! y. V. Z. B5 ^$ G+ cvector<int> vectors_intersection(vector<int> v1,vector<int> v2){" u3 n3 w% v& }( E5 s
        vector<int> v;
7 j& X8 c1 P8 K        sort(v1.begin(),v1.end());   . R3 z2 l- c+ j) |
        sort(v2.begin(),v2.end());   7 O: J5 {' [. K0 U
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
3 }4 l  c4 A2 d- P$ s* u8 ]- t        return v;# q  n9 v% f( L0 f. O2 K7 E
}7 ?3 U5 v3 d+ N

0 p" T; f$ N) s4 g" e& z//两个vector求并集
& q, ^3 y+ ~& K  k8 K# Q1 yvector<int> vectors_set_union(vector<int> v1,vector<int> v2){6 e& Z6 x3 @& l9 x- t6 q
        vector<int> v;
% I, n1 E) m. E9 V; O. M% ~        sort(v1.begin(),v1.end());   
+ p, C) k3 M: @, G- y+ R        sort(v2.begin(),v2.end());   
0 }0 X# B2 ^" h) A. M        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 + P4 ?$ ]# v$ ^) {) z* f
        return v;/ Z# k. W+ a& T6 C  V4 Q( `$ F
}/ m/ Z( n4 e' ?/ @* K' t
* Q. M$ e0 B2 R! P, Y# N& C3 X3 s7 \
//判断vector的某一元素是否存在
+ `' R  l7 t/ A) T$ tbool is_element_in_vector(vector<int> v,int element){2 h' _( L1 I; M4 J
        vector<int>::iterator it;0 [" d: \8 I1 p
        it=find(v.begin(),v.end(),element);
9 }) E) q5 [2 O        if (it!=v.end()){0 i" \& K0 s. S  W+ S# ~$ \
                return true;
# {' I1 J% }$ Q        }
6 P+ U9 L; a; }3 O* g" Y1 t        else{
* i1 R; ~( R. W8 N                return false;
5 X0 {$ Z0 j' H" {* n% U  U# _        }
, c) w# d6 Y2 `" ?9 e+ B* }1 l}' c7 F/ F# C. I$ n8 j7 f' S& ~! p" ^
+ @" m! O! s3 b3 G; I
int main(){
! j2 G. ~: z' N        vector<int> v1,v2,v;
- Z. v  C1 B8 c# V        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);) o* B& n! T; J; ^
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
) Y8 w2 `2 }8 b( B* c        cout<<"对v1去重:";
  G2 k5 T! X& _9 g$ T        v1=unique_element_in_vector(v1);
0 e$ s$ p+ h' A. s  o        print_vector(v1);3 r1 W, u% ~8 T7 N3 j
        cout<<endl;
, I+ {8 ~# l! r8 Q" W% J" H6 f        cout<<"求v1与v2的交集:";. V+ V, b; c- J/ X+ C2 e
        v=vectors_intersection(v1,v2);6 l9 ~4 u) a! V# Q& w
        print_vector(v);
3 @2 q  r, S& \# e1 y+ Q        cout<<endl;) |2 V! {$ n- A3 `: h
        cout<<"求v1与v2的并集:";  L4 \2 ^5 B; \* v9 E
        v=vectors_set_union(v1,v2);
9 n& E# {/ E; u$ T/ c        print_vector(v);$ y& o6 u4 g% _8 H
        return 0;  {' w* F, w- \( p$ [
}[/mw_shl_code], B/ J9 @5 t' b5 e" a( d5 I
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了