PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
0 P6 @5 `: b6 U5 q6 X: @; \% U

  t: Z4 _  F( n; S9 JC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:- k8 A' i2 a5 u% c
[mw_shl_code=cpp,true]#include "iostream". a+ R9 ^( A# \$ }  e& b8 j/ V& x
#include "vector" * |3 K' h% ^6 n) v0 y. U# ]) ]
#include "algorithm" //sort函数、交并补函数- l8 I  p% Z9 e: v0 H; z1 a
#include "iterator" //求交并补使用到的迭代器" k7 V  _. E# q, T+ s
using namespace std;
- g4 s6 ^" l- A* p0 G 8 H% L) Q& q. \6 M" f* @
//打印容器vector# a6 A% I  e, X  h, d/ [
void print_vector(vector<int> v){
! }( W: ~+ F0 {% i7 o, v        if(v.size()>0){
3 ~) i2 z  t- P3 [! Z$ [                cout<<"{";  
7 C6 f7 {2 G% G; K                for(int i=0;i<int(v.size());i++){  
9 D4 B9 X8 [+ P: M& l- r" Q/ q                        cout<<v<<",";  
# f( ]6 G& I3 r$ K# x& x                }  
/ k  Y7 H, H* p# Z( q$ w9 A3 _                cout<<"\b}";  0 {) ~! R) u* i2 {1 n
        }& t% ^1 t" a) w: x
        else{
2 L' M% m! O' A% l6 l. v* K                cout<<"{}";) v6 O; q! I; Y) b: }( c* G
        }
/ v  R' F# y2 W0 i1 N4 p}
' F5 [3 y! U+ S: ?9 o! S, L6 K. Q 8 Q  J; c; c- r, S; x8 J, Y& }# N5 T  e
//容器vector中元素的去重' c. `: ~. S, [! Y
vector<int> unique_element_in_vector(vector<int> v){
8 O( {  U2 \5 x, _: c( `        vector<int>::iterator vector_iterator;
# Z% N/ n: d" W6 U        sort(v.begin(),v.end());
% Q& r4 x3 E* C( J/ B% A5 A        vector_iterator = unique(v.begin(),v.end());6 O6 A! T# A8 Q9 Y; S: O
        if(vector_iterator != v.end()){& \# L! ^# w9 D$ L+ e
                v.erase(vector_iterator,v.end());
. |% N& R* r: k% e4 `3 u. r& F        }- ]7 l0 N3 H9 @2 f; u+ `
        return v;
* `9 G, ~+ R' q2 S( G5 Q}
. e# R: H! i( z( k* i; o4 o 8 D( N- K% @9 x; |  F& `
//两个vector求交集
/ u2 d( }9 T" d# O0 avector<int> vectors_intersection(vector<int> v1,vector<int> v2){& ]# _, Y) G+ Z- s
        vector<int> v;3 n7 p5 B0 N, f1 [
        sort(v1.begin(),v1.end());   - H4 S: w- o0 D6 L: H
        sort(v2.begin(),v2.end());   
$ i* }$ {3 t/ @2 M# H/ @  _% ?4 L* U        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
! O% _4 W/ g2 B9 y        return v;
! t0 O. ]; M$ k8 x( V}
- ~/ `4 N/ K2 }" q. q
0 t2 Q3 v& i! w4 x& Q1 B: G1 S//两个vector求并集
+ v4 j8 L4 q! ~vector<int> vectors_set_union(vector<int> v1,vector<int> v2){( {! Q& @3 G' R. g, M
        vector<int> v;# ^, A' h/ V# K: a
        sort(v1.begin(),v1.end());   - Q# P. N0 I) r1 U6 `: w
        sort(v2.begin(),v2.end());   ! G7 o: d' X- }) }4 v- `
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ B0 Z  y# _3 r( h0 ~
        return v;6 U, _" f& [8 g2 M* K+ Y
}
8 e( Y" v1 z$ B" y# F+ k
0 b  ^, X8 v1 }7 _' T( X. ~/ Z//判断vector的某一元素是否存在
7 G( y$ X% j- l% R6 S$ {bool is_element_in_vector(vector<int> v,int element){, Z6 G& q% Q; v* b: d7 j; X
        vector<int>::iterator it;0 c5 f3 ]2 Z8 G* W1 c  S
        it=find(v.begin(),v.end(),element);
' @6 u! r! o- n4 B7 Z        if (it!=v.end()){: H; g" o7 b1 r* w. u5 R4 _' X5 _/ f
                return true;. W8 w% T6 N# k6 }: f; h9 V  k) c& d
        }  G  B. h# O& M/ p7 U8 I; r5 p
        else{
4 g6 O% N9 b1 B4 h& I                return false;- `( d7 y. M" N6 w
        }& S" L) ^8 E1 q- n9 g+ F( V
}
2 S' o7 m* q  t. h# l1 r $ w5 Z3 _9 L; Z3 t' i- W
int main(){' t: i0 S0 i+ E% |, N  w* T
        vector<int> v1,v2,v;
$ z! C1 _* |* w/ a        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);  U6 K# I9 S# ]9 d$ L1 s3 _$ {, Z* M6 @
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;- A. A9 w( s2 B
        cout<<"对v1去重:";
4 L9 `2 c/ p1 m# m8 ~        v1=unique_element_in_vector(v1);
& E' q$ I. R& ^7 w( ?. l        print_vector(v1);- p" P* _9 U* d
        cout<<endl;& w5 _. P" y. U8 ~
        cout<<"求v1与v2的交集:";
# R& w) [* ?! o4 ?2 L9 P5 E        v=vectors_intersection(v1,v2);1 z# B% l% j& q
        print_vector(v);
. i" l  d- o' L( P6 X4 \& Y        cout<<endl;( j* O; X, }: ~; O( c) {, ]: i
        cout<<"求v1与v2的并集:";
7 f/ E+ T  x! V4 \        v=vectors_set_union(v1,v2);) b' e1 r9 y- h. m
        print_vector(v);
1 }+ [$ s% _2 s4 W' K/ p" T! E! ]7 b        return 0;
! T0 B# W8 Q/ _: j}[/mw_shl_code]
3 Q( d; W" [# }
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了