PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2018-7-2 19:41:23 | 显示全部楼层 |阅读模式

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

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

x
- d, W9 z* v. Q% x9 f
  f# N" h3 C- `$ Q. n% D% ]$ q
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
6 H7 e- w) T' q9 W  J5 w[mw_shl_code=cpp,true]#include "iostream"1 o4 s; F8 I+ _$ p; d; W
#include "vector" + v8 |( }9 C3 f: `$ i
#include "algorithm" //sort函数、交并补函数( i2 Y- u- g  ?* i
#include "iterator" //求交并补使用到的迭代器
; U3 A+ d) ]: xusing namespace std;3 ~0 W  S4 ^. W  W  u

: J- _) w  ~. i5 P- e1 _  D//打印容器vector2 h" Z) u# H2 d1 f+ d1 W
void print_vector(vector<int> v){8 |( L( _( ]: p9 a& H  C
        if(v.size()>0){. ~4 X+ ]5 m& [2 j
                cout<<"{";  
, k, A! e% }' f0 ?$ |5 J! w. H( B                for(int i=0;i<int(v.size());i++){  7 R2 _6 D/ l/ S" C/ {+ {, b3 i
                        cout<<v<<",";    `! B7 M+ }, v* ?5 r
                }    [" I) {* {# M' V; a; z
                cout<<"\b}";  
( _8 u/ E0 |$ C! x        }( D& y  v2 e0 {* ?% ^) g7 I( l
        else{
2 s9 x( g4 y* a" u  m, T2 H. X                cout<<"{}";# o+ v% k  w4 N# N1 Q- X( e5 \
        }# h6 @* P( ~/ w; k2 a; a. i
}: U9 r/ f1 ^/ T+ ~! q) M7 ^1 f" w8 e- J

: @8 K5 m  K- o7 ?5 G4 m//容器vector中元素的去重" U& F1 A5 Q% c% r4 F" `7 x
vector<int> unique_element_in_vector(vector<int> v){3 z& |! T# e, Q) T) N
        vector<int>::iterator vector_iterator;5 ]* p) Z3 ^9 q, g8 l7 U& w$ T
        sort(v.begin(),v.end());) A: N. c: J+ Z# x+ e. i% p- {
        vector_iterator = unique(v.begin(),v.end());2 K0 R, r7 {. L
        if(vector_iterator != v.end()){
% x7 Y$ W# O/ ]( r* R/ [. b, }                v.erase(vector_iterator,v.end());* ^, ~0 ~" y  d0 J* {
        }
% Z; x6 z% ]; x- G3 }0 |+ O% F! ?        return v;
3 U- u6 z6 N& L, H  G% P}& I4 B2 ?4 M/ S, B8 _8 A

* p  s9 p' M. x//两个vector求交集
3 B. P! C0 E$ S8 }vector<int> vectors_intersection(vector<int> v1,vector<int> v2){+ n5 a) j2 p- N9 G
        vector<int> v;
( S5 ^$ [9 c. u& f' B        sort(v1.begin(),v1.end());   
8 G1 F. `( Q  U( o; d0 L7 j        sort(v2.begin(),v2.end());   9 ], ]3 {: s6 m7 t, b
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
* s  q  V1 W% C& h% b6 K0 o% ~! w        return v;0 z' B4 n- Y* e3 W
}0 I$ d; h# t8 i0 ]
* \; S4 C$ L9 }' Y2 d' j# C' L
//两个vector求并集6 E) c0 O. A0 K. b# J7 A* Z
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){; I( S) |# h$ x# X/ b, n; {
        vector<int> v;
  P) l( ~) Y9 J+ x. f0 \- N        sort(v1.begin(),v1.end());   # h: `2 s# c6 }
        sort(v2.begin(),v2.end());   4 i1 V) g' d1 l
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ u; N& f, k  C' H  H
        return v;
+ w; ?5 s6 a/ ~9 ?  u3 @$ r}" [9 t3 ]5 I8 p, z2 B

4 x% ~/ i) c" K; Y; B: D//判断vector的某一元素是否存在
* U9 h- @5 K# B. B& U$ \6 K# ybool is_element_in_vector(vector<int> v,int element){
/ _9 F( g# S& F        vector<int>::iterator it;
" S' g* [" y5 |( J6 L        it=find(v.begin(),v.end(),element);( ~! ?' h+ s$ W9 W8 |+ ]
        if (it!=v.end()){8 P9 q. K4 W8 n; r+ _
                return true;
  N- u5 L' I6 O2 [8 W5 }        }3 g4 T+ G" S3 J3 d. w2 \. B
        else{  E" n# h, ~, O8 Q" u3 n- w2 H7 J9 @
                return false;* ]! y( y: U9 G* \/ }8 [! M7 t
        }. _) H, D. Z$ T/ @: t& [9 c
}: ^( O" ~6 Z2 |* L
  ?" i' b8 q& F' W: ^: V2 \
int main(){, |4 s7 k. j% m# ~6 i- n1 H
        vector<int> v1,v2,v;
' Q! q1 U* g$ g        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);2 h! H& K& p; X2 z2 S7 v! o9 r4 ~
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;% }4 `: V0 S" l# E
        cout<<"对v1去重:";
: [" g3 [- ]# i/ I        v1=unique_element_in_vector(v1);1 T* r( o3 a4 \$ x! L% M
        print_vector(v1);& D$ ]& x! j& `
        cout<<endl;- `! l# t: ^5 I0 d' W6 I1 _; p0 b
        cout<<"求v1与v2的交集:";& l  p+ I6 ~' T# i6 F. F
        v=vectors_intersection(v1,v2);
1 D& Z# s% Q; m# x; _  C        print_vector(v);
  L6 A3 u7 f* n" d5 _9 F2 S        cout<<endl;
5 y- b2 ~' x4 J. k        cout<<"求v1与v2的并集:";
0 H+ N! e  ^1 Y+ k* j0 i" N, w' H        v=vectors_set_union(v1,v2);
4 X0 L" _: P+ R        print_vector(v);3 a# i. L& N( ~5 x# H4 }2 o4 ~9 j
        return 0;
& U  e& Q& P- w/ u7 a}[/mw_shl_code]1 G* q- x, b/ |9 W3 F" |5 R
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了