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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

) K! b+ H  ?5 T( D+ o
6 t" N& G* W# F+ X% q6 QC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:9 t2 l. V7 ~0 l0 N8 e; X
[mw_shl_code=cpp,true]#include "iostream"& O1 [: B; j* m6 y5 Z
#include "vector" - m- ^% r# X) w: W
#include "algorithm" //sort函数、交并补函数  g2 h) ]& q8 n3 U  W; |6 P1 v
#include "iterator" //求交并补使用到的迭代器& I( r$ r) J- ?& S; U( F, W
using namespace std;4 h+ h1 T, P( q- a0 R

/ M  s- l4 q3 z# H//打印容器vector+ x$ A) @" @- y4 V+ G7 Z' U6 a
void print_vector(vector<int> v){
. Q, L7 T/ O2 z- h; a4 K/ H! H6 e! w        if(v.size()>0){
% G" O& g+ d3 T                cout<<"{";  + [+ Y$ b9 y( X; r0 Z9 y
                for(int i=0;i<int(v.size());i++){  * a4 G. F2 a" m7 |9 y4 I
                        cout<<v<<",";  
4 `( ^# _. H( H, I! G                }  
: s/ d' `' Z7 {& J4 }                cout<<"\b}";  
: L- c4 ?' I3 E( N6 F1 h+ L: E        }# W/ C# u0 k9 P) A
        else{, t% d* [; ]5 n# f3 I2 |, I
                cout<<"{}";
5 r  U( R( n! P( H0 d8 t        }
) {+ j- M1 G% y}
6 u" I/ s/ i% Z6 G% M- z4 X4 ~
0 K$ h$ N: ^( w! [, r. y//容器vector中元素的去重5 u1 ]' d  f% F
vector<int> unique_element_in_vector(vector<int> v){/ @. X$ |% X, [& _% _; H) `- y
        vector<int>::iterator vector_iterator;4 W; B" `) t; l' A' M8 p1 e/ a
        sort(v.begin(),v.end());
7 W( w' R& h% T1 c% E        vector_iterator = unique(v.begin(),v.end());( Z( x5 u, i7 B( y* ^
        if(vector_iterator != v.end()){
' l  E% }- S% u" |                v.erase(vector_iterator,v.end());- e/ A) ~. h, N& s( r
        }
# A3 c+ C( P+ l. D1 B        return v;& d. r/ T! D! F4 Z* Y/ ]
}
, j4 W: K0 |+ g3 ]( }! ]! U# [
+ ^& \0 c: J0 l* D: _  ]* V//两个vector求交集
# a  m/ b# s6 y" [. svector<int> vectors_intersection(vector<int> v1,vector<int> v2){5 r( f; D8 i! o! y/ r0 |
        vector<int> v;, }. m! v1 K7 s* W& G
        sort(v1.begin(),v1.end());   
4 b9 D0 Q& S3 H/ _% [6 N9 `; f        sort(v2.begin(),v2.end());   2 z4 U5 n  x1 X* E7 k$ h. i
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
, E1 a, K/ B2 z8 s3 z        return v;. T/ Z! Y, ]& I
}
* e. g. K' i3 e6 F! i/ K ! s4 V. Y* O3 N5 M2 N$ J, q
//两个vector求并集, P- n' \  m6 G/ E. l
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
" X$ x0 k8 [; O, N1 U        vector<int> v;: C! c9 F; J% r
        sort(v1.begin(),v1.end());   
3 l: c, [$ g" i8 U; _" O8 C9 S        sort(v2.begin(),v2.end());   
( }& x) g) {' _        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 , Z3 r* A9 x& C8 B6 P, s
        return v;5 j' C5 V1 u6 H( l" `
}
2 N. \) l- d+ S) {
8 I7 t$ _7 r$ L" I5 I6 U4 ?//判断vector的某一元素是否存在; k# D3 {* M- q1 \' x( m
bool is_element_in_vector(vector<int> v,int element){
  R2 c1 G7 P+ ^8 @        vector<int>::iterator it;
, |( i, v* a# {) J1 T! n# f        it=find(v.begin(),v.end(),element);
; U- G' [5 F1 d+ }7 L        if (it!=v.end()){2 |& V5 {3 ~5 k9 L' p& x/ x; k$ h
                return true;0 k, G: V! G5 @
        }" c1 j$ e/ S$ [. u) T2 H( {" \
        else{
* M4 y1 t8 c3 H1 q! M                return false;( x/ _5 ?( O7 ?, ?4 ^8 O
        }! P# T5 I* T+ P9 Y) T- G
}
# w3 K4 S) P# r" i- p: J2 [ 0 G( [8 C5 Y# i3 {! M% f  b
int main(){
2 D5 J: ], }* S" z8 |2 ?) F( Z5 b7 i        vector<int> v1,v2,v;
& ~3 ~+ C9 x$ I3 k% r3 C        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
; J  E1 O1 h* C+ z6 P        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;! |5 s; a5 ?5 t: Q1 b* r6 @: S7 g
        cout<<"对v1去重:";+ O6 V7 q: C% p+ n- y  y& Z) C
        v1=unique_element_in_vector(v1);4 T" l* ~; p3 b+ j  D6 c! x
        print_vector(v1);
  j  \$ [4 l3 L; |2 w2 r        cout<<endl;
7 a3 A& Z2 A6 ^# b0 \. J# t        cout<<"求v1与v2的交集:";: G4 A' F( b( t
        v=vectors_intersection(v1,v2);
6 p8 ?+ W$ |9 J9 N        print_vector(v);  r0 g# e9 V( A1 L" f- k. T( C
        cout<<endl;4 G- S* F& q( J# S- C9 j+ b. K" L; D: d
        cout<<"求v1与v2的并集:";; y2 |. N( f+ J9 k' _" @+ I8 E
        v=vectors_set_union(v1,v2);
; A: O+ t7 k" Q8 D0 Q- w7 W. f9 c        print_vector(v);
. B  g6 P  t  q% N, v! ~        return 0;
3 X2 ^$ h, O5 i; S" b; Z1 U0 d}[/mw_shl_code]6 ^0 T  V3 j% E6 |" J# q
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了