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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

. |0 |. N/ s$ u( |# M! s/ H
; u  q8 L3 `( RC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:7 E* u8 ]2 l  [% P
[mw_shl_code=cpp,true]#include "iostream"& l% s+ O0 S" z
#include "vector"
$ R: U+ h9 O7 V9 o#include "algorithm" //sort函数、交并补函数
1 {# X3 Q0 _& A- V; H1 q#include "iterator" //求交并补使用到的迭代器
# O+ t9 {) M4 y# \using namespace std;
4 S/ c% D+ X- z* i. q8 u ' y0 p5 o# G, U% ]; G' D
//打印容器vector
5 g8 D- ~) D+ C! Y1 S3 z8 evoid print_vector(vector<int> v){
% U  n& u3 V! o1 a) x# W        if(v.size()>0){
7 p) ^  E1 S0 k1 D( U' T& b1 d                cout<<"{";  + v# V* p' Y& l6 z6 W  e2 p
                for(int i=0;i<int(v.size());i++){  
& ?4 M& r, i+ |3 Z                        cout<<v<<",";  
% f5 ?" T4 {/ T, P: s9 y- k$ b                }  
/ W8 I: \  k9 z                cout<<"\b}";  
2 i9 e+ _7 b  i2 `5 X2 ~        }
$ H: T" \" B/ D        else{
3 R( I5 V: r0 W2 }1 ]- g  j                cout<<"{}";" Q9 H2 g8 D, a% Q
        }, H' c$ `1 G. v$ P6 u; x8 r
}3 D9 K, ^- z# s3 u! I

0 @. _& [5 V: d6 q6 A% h//容器vector中元素的去重. c7 q  W- Y' f5 H  K% v: S
vector<int> unique_element_in_vector(vector<int> v){
1 C. g0 t- u* `0 P& [; I# o+ B        vector<int>::iterator vector_iterator;
& W7 P8 ^$ c' g& C1 H$ P5 R+ N0 B        sort(v.begin(),v.end());7 m! t3 p- P, _$ {4 ]& J' k
        vector_iterator = unique(v.begin(),v.end());% ~7 @8 K7 s' |
        if(vector_iterator != v.end()){# {1 f; z8 C3 B& I
                v.erase(vector_iterator,v.end());: r  |4 e7 }/ f; k( r' x; j
        }
+ t4 _# d9 H& E* a- o8 |. G        return v;* P7 a8 L/ v1 J6 d( i' J7 `$ i
}. l$ }$ A' Z; @3 ]

1 g8 Y% e% p# h5 o( s//两个vector求交集9 c6 ^! d+ {/ w: r! J: N5 l
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){0 G* Q1 k! V; N
        vector<int> v;
8 D' S4 y  ^9 v/ B& d        sort(v1.begin(),v1.end());   . f" Q! R  A; w' T3 ^1 W# v
        sort(v2.begin(),v2.end());   9 V+ F! y4 |3 x! E. E
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 ) Q+ V2 s; X/ g# ^6 w3 n/ E
        return v;" L, m1 N8 j. Y- f" s
}$ y6 d: C( H$ |. z% e3 b& W; R
5 m+ D: H2 l& c0 P9 x8 A9 O5 c
//两个vector求并集
/ M% Z8 p2 v" F( Dvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
* _; e" e+ Z5 [        vector<int> v;8 `1 G4 z5 y3 k0 y) `6 E" N  s
        sort(v1.begin(),v1.end());   
7 d! r; t3 ?6 E7 v0 c' v) a3 X        sort(v2.begin(),v2.end());   . q2 i: p' {( M9 x
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
' i; P$ ?! u5 i        return v;
* I. Q0 p* Y/ c) U9 M) @; N}. X! f0 _  H! z

2 V. D+ f$ C$ k8 \" f//判断vector的某一元素是否存在. _8 E# n: m& r. ~
bool is_element_in_vector(vector<int> v,int element){
3 H. H) e& `5 [. u        vector<int>::iterator it;8 T# f! {' R- U+ K0 l1 G+ e4 k
        it=find(v.begin(),v.end(),element);
$ `7 `! u* g; C* U& b7 H/ @        if (it!=v.end()){
$ W% w$ K# `0 l, e% P' u/ M% \" w                return true;
8 r0 g. K, x. R& }$ g4 G1 i        }4 l6 C+ C, G* u1 M  H6 k# @
        else{
+ _/ u; w) ~* ^3 E                return false;2 C. W1 ^( V6 x
        }1 w( _! m0 u# t9 E3 l% r
}
% k+ `$ e0 b( \1 U1 N
5 L) X' c7 r! V; Y8 ?4 g) u5 A# [int main(){
; I+ _* h) }8 |2 u" E' k6 U        vector<int> v1,v2,v;
* o) ^; Y5 j5 N        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);8 l/ T% N, H- o) H7 w) c
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;$ c* V  K$ Q5 ~# K0 x1 ~0 @
        cout<<"对v1去重:";4 _7 T2 H& U: L# {: W: w* z) K  n
        v1=unique_element_in_vector(v1);
1 y" p, M9 m! j, Z9 Z0 S        print_vector(v1);
- f% @% v2 m' ~, b        cout<<endl;5 w4 f) p0 S0 {4 P  h
        cout<<"求v1与v2的交集:";
$ U/ t' f% g2 n8 T        v=vectors_intersection(v1,v2);% m) s: i# M3 e4 T6 x
        print_vector(v);
  x* H6 l! s9 k& z        cout<<endl;
/ v& P) q! r. [5 T+ F+ s        cout<<"求v1与v2的并集:";
% X/ B# K3 O% V: L1 D+ Y* ~; Y        v=vectors_set_union(v1,v2);
' p5 p: O1 {, J2 B        print_vector(v);
$ }. y% h! v# S9 L( S% _7 h& A        return 0;; p# z* f3 P8 _; ?" o- ^4 _
}[/mw_shl_code]
: n+ {& S  q# S; Q+ [2 T
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了