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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

" g8 T" _" L% U  c" w5 e) |# q5 {5 ~5 J7 s: i. R! K
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:9 t+ X3 Q) s) O/ d4 P5 ?; L0 E
[mw_shl_code=cpp,true]#include "iostream"
9 I8 c$ |+ u: I! G: S2 O7 A/ }  O#include "vector"
: q4 W, d& J) }; S! {* C#include "algorithm" //sort函数、交并补函数
4 D+ E6 e" |8 r9 h$ F2 [#include "iterator" //求交并补使用到的迭代器
& G( [0 C/ e7 t, ~using namespace std;: C, p% T- b7 E0 l

9 u5 W. F2 A: m0 `- q//打印容器vector
9 n, u% [4 g: Y* pvoid print_vector(vector<int> v){
8 g7 u& J  g3 K        if(v.size()>0){2 v( S+ ?6 A8 N- T
                cout<<"{";  
: M; ]! Q1 ~8 h9 k& A                for(int i=0;i<int(v.size());i++){  7 z0 Q8 C# u8 n( `5 W
                        cout<<v<<",";    L0 ~- f6 @6 R% l9 s& T
                }  
" s0 j. z; N- U/ K                cout<<"\b}";  $ X* r3 C/ L: @" u
        }
6 t% n* z- a" F- |        else{' @( G: K& I% H2 }% Y2 _1 x; \
                cout<<"{}";
0 s9 f9 B" {1 C; L        }& L0 s  \+ Z: V" T/ Q) m
}7 ]3 U7 }. T$ [; Y& ^+ T

& p( {8 R/ S9 S9 B//容器vector中元素的去重) u& F# L8 q$ T+ {) ~
vector<int> unique_element_in_vector(vector<int> v){
) G9 u9 a" |1 H* t( @        vector<int>::iterator vector_iterator;, b" {1 c  S$ a+ z7 x& w2 S
        sort(v.begin(),v.end());; S, J& S/ w7 e9 K! f% s
        vector_iterator = unique(v.begin(),v.end());
* ^+ M  c2 J2 \$ @& _1 G        if(vector_iterator != v.end()){* R8 h& J9 P3 ~/ v
                v.erase(vector_iterator,v.end());) `) S9 G- t% D4 P* ^6 j- x
        }% a/ X# f/ x- P9 J
        return v;
/ k3 U5 {& e: V}8 W. v9 _) F( O/ K/ {- A- Q
, t: D$ u2 K2 m* h; Q
//两个vector求交集& o! m: K( ]7 s
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
; [- D8 ?8 L$ S% T1 f& [2 R5 ^5 g        vector<int> v;- [! c; Z' U# z4 F% Y
        sort(v1.begin(),v1.end());   
; D. [$ r- S% @8 h1 q  r+ m        sort(v2.begin(),v2.end());   . d( x4 v( m! x+ \8 z% z7 w! F$ g
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 : f" m: a- {( @+ Y# I' O
        return v;
7 D" E( a! g7 Y0 F# \8 m}% W1 Z8 N( V% R, v( H, w7 [

7 `3 V, v* J/ {; a* W$ w//两个vector求并集4 p/ N9 |: E6 O, m5 ]: D. A/ K1 C
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){6 Z* y$ Y( n' U" O! H
        vector<int> v;4 R: Q" q% a: M' u7 I
        sort(v1.begin(),v1.end());   
/ y5 m1 v/ ~$ b' [1 G" l        sort(v2.begin(),v2.end());   
; f# h( _! {5 ^& r        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集   K7 ]& Y# q3 b
        return v;
" Q) S7 l' F$ ]' t! Z}
0 M  Y, w) G# L/ U: ~
1 o7 h$ T3 W& l4 y' X//判断vector的某一元素是否存在/ b* l# X* v( h9 p* p2 O& b& J
bool is_element_in_vector(vector<int> v,int element){! W3 A* O4 u( U8 F+ P
        vector<int>::iterator it;; t+ ^5 l; ?* o9 M$ h5 ]' }
        it=find(v.begin(),v.end(),element);
# g+ I6 D$ E# a0 q6 a: i        if (it!=v.end()){
: f) `; J) l( `2 q5 q5 `                return true;
6 e( u" ]% s) g0 C* E- V        }, @! M9 I: V! |; N+ e
        else{
4 `* l  N% r$ G- f$ Y' R                return false;( y4 Y, \6 m  n0 X4 @
        }
  T( x. p) D3 G. ~& Y- \}* o) ~! w% q* s# s4 B  o

- q  q" Z% g$ Cint main(){
, e7 G! M0 A2 \0 k  W        vector<int> v1,v2,v;
2 i' m' ^: u& t, y        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);% h- S% x% l' X; X4 O2 o' ^
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;  _& C8 s$ J0 |4 J( A. K! [* s; u
        cout<<"对v1去重:";
: m! j5 M! X" F9 I6 a$ }        v1=unique_element_in_vector(v1);
: G. @. L9 [& z4 d: }, [4 C        print_vector(v1);
% N$ S9 K7 D" _  J; T' K        cout<<endl;
4 f. x- R# F* T. J. V% y        cout<<"求v1与v2的交集:";/ ~. _. N, c1 m* e' z" {
        v=vectors_intersection(v1,v2);5 |5 O. j" @' |% a
        print_vector(v);
/ p+ W4 X" h8 d# A; P/ ]2 `        cout<<endl;" Z( x+ l6 _7 i
        cout<<"求v1与v2的并集:";
+ P, j+ D1 x/ j9 |8 g        v=vectors_set_union(v1,v2);  l9 J: F9 @9 M' |- H! [. u% \
        print_vector(v);
7 v5 m% q, y! _5 Q  H. g/ M        return 0;0 W, M5 c& |6 S2 n3 A
}[/mw_shl_code]
' P9 L2 h. Z) {" F
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了