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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
8 }2 I* U! W+ w( r; }/ V3 O

7 C; q. k) F6 l( s# v; PC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
% P# f+ E% m$ }5 h( o5 {) V! h" O[mw_shl_code=cpp,true]#include "iostream"
6 ^7 P9 d- K0 N#include "vector" 9 `4 {( i' l- P9 T
#include "algorithm" //sort函数、交并补函数
& F9 p6 B9 Z! d# h$ G% B3 z1 v, j#include "iterator" //求交并补使用到的迭代器
, k  ]3 o3 z/ j3 k" Q4 Jusing namespace std;' C- @9 T4 s  n& r0 R

+ U( I0 u! Z% q0 ?8 ~  @8 [1 o//打印容器vector5 I. k0 h7 z0 J; Q2 P
void print_vector(vector<int> v){% H2 H( V* Y3 h( x# O4 M( F
        if(v.size()>0){
9 q  O8 ^1 v" t5 X: z                cout<<"{";  
3 I0 v7 `; L$ h( c4 c2 n! ]                for(int i=0;i<int(v.size());i++){  
# E2 y+ J3 y" }# M8 U+ i                        cout<<v<<",";  ; A' y$ u; f4 q% R7 D$ G! ^- ]
                }  
3 C' S- [- s+ ]                cout<<"\b}";  
$ c4 y- o) f. F5 q" X- w        }9 L8 C* D+ h0 U
        else{
9 f& ]/ F4 @% u. |( U' c                cout<<"{}";7 j7 f: x$ ]0 j1 y% _- K) c) [: I! l
        }- J3 V0 Y0 O: O8 e9 p( g
}
7 L. C8 S8 c4 }1 L) _" w7 w: ~, F# [$ S
5 Y+ V/ m" H( Q' V3 X//容器vector中元素的去重9 A- G4 [  u1 ?2 X* H
vector<int> unique_element_in_vector(vector<int> v){
* s- B5 X; D4 o( ?( e$ \8 C+ ]2 x        vector<int>::iterator vector_iterator;1 j1 J; x( i; U1 q' R. G
        sort(v.begin(),v.end());4 F) m) M% Q0 M7 S
        vector_iterator = unique(v.begin(),v.end());, w7 u, R$ F: X. v7 c
        if(vector_iterator != v.end()){+ H7 a" S, d2 ?- _8 f) @- U' Z
                v.erase(vector_iterator,v.end());
& `! y6 ?) }6 b' d# Q  g8 i9 ~' F        }
0 E+ k. ?) w/ {* Z2 Z* ~        return v;
6 M% x9 e# T9 c: ~9 S6 c9 q/ Q}# w- ^  }- o8 _

0 Q2 W" `0 I; W//两个vector求交集2 K+ ~, t. C! m
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
- H4 B2 S- m, q' D' \        vector<int> v;
# I0 r6 L: j% {        sort(v1.begin(),v1.end());   4 `2 v" ^, Q4 A0 v
        sort(v2.begin(),v2.end());   1 n7 [: B  t5 q7 h) P
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
* |% {6 \8 s) _+ ^& i2 l/ b        return v;' O6 H' _2 G! F$ E9 T  h4 k. {
}; @# E4 A% h; t# J3 a2 [
$ y% ~) k" p3 _0 X& c  g
//两个vector求并集
: p' T( S; [8 k4 \9 g% c4 V- wvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
" _( }# u1 l8 z0 f# z        vector<int> v;
2 p% t# @( V2 u        sort(v1.begin(),v1.end());   
. W1 [8 l! U8 {' Y  n4 k        sort(v2.begin(),v2.end());   
3 ^7 c" P4 A) q; j" x- S        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 # I) E, v% Z3 Z2 N
        return v;
$ C5 ]3 y$ n/ P7 E}) v2 C0 r/ E, U4 q# m

& q' J6 ~" v; N//判断vector的某一元素是否存在2 B$ ]8 m' f2 ?* a
bool is_element_in_vector(vector<int> v,int element){
/ V; x! M0 K# E) x% p( Y        vector<int>::iterator it;
9 }7 D7 D+ r, V* G        it=find(v.begin(),v.end(),element);5 k) O5 ~! p0 ?0 a& `1 l8 H
        if (it!=v.end()){
& g; N$ \/ T; x& S9 X                return true;, H% J+ X+ n8 M$ H/ l8 D& @
        }3 J' k: ?1 Q  i4 c0 I& t
        else{- ?7 Z2 x- C( G4 j* ^
                return false;" {9 g5 `: `. r) v9 }" g
        }
5 ~- I9 F7 k6 B- R% r}
8 m& |/ R1 I) R7 s9 n; a1 {/ i% t/ J
6 t4 g3 A1 L+ z" h* C) Fint main(){+ r' R" H* s8 x6 P$ J9 G. V
        vector<int> v1,v2,v;- j$ M9 p2 A; X! s! h5 Z/ U' s+ T
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);6 d2 Q( S- Q3 z8 w/ n/ V( [
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
. _' ]' }3 `2 M        cout<<"对v1去重:";
) b0 e" P5 R) U$ M        v1=unique_element_in_vector(v1);: f0 {3 Y' v3 v( `
        print_vector(v1);
* {' M: c& Z% q9 ]+ l/ Q' t        cout<<endl;' Y6 x0 s+ X/ N
        cout<<"求v1与v2的交集:";
4 }2 Y) ^5 v; r' J        v=vectors_intersection(v1,v2);
1 y6 O8 S; V& l, {* k1 c. N/ F        print_vector(v);
! r# j# k: u! D) _! J        cout<<endl;; F9 l! f# k3 W  [& m
        cout<<"求v1与v2的并集:";) `- Z( B6 S/ _8 |7 K( C4 M
        v=vectors_set_union(v1,v2);. j# G; r3 }: w+ W, F# B
        print_vector(v);
/ |* h& ?: ]' P  d, F& \4 Q        return 0;
3 T) Y! C1 w2 e}[/mw_shl_code]
4 R* ]/ {3 X  W& o0 H" p
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了