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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x

# P7 s9 u. q3 R  f* Q# U0 X4 r# m5 O: o7 u, {
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
9 ?; P: Z- x" p% P/ O[mw_shl_code=cpp,true]#include "iostream"
# q: P; [9 O4 z+ H% [) F#include "vector"
3 i) l7 {5 i/ m0 F# D2 B#include "algorithm" //sort函数、交并补函数
' c4 e1 B1 e5 q" b4 q8 H% }, u3 l% E0 ~#include "iterator" //求交并补使用到的迭代器# L% j/ ~2 U% o$ B1 f
using namespace std;5 L  _) u5 i2 m. d& r
8 t0 F& |' z0 L, D! V
//打印容器vector& p- N  v) a* |6 k1 H7 U# q1 a$ n
void print_vector(vector<int> v){
# |0 w" [; l4 K0 j        if(v.size()>0){
& g4 t( P6 g7 Y8 V: n: }: {. J' ], B                cout<<"{";  6 R, V4 K6 G' c2 G
                for(int i=0;i<int(v.size());i++){  " ?8 Z! E7 F0 B2 Q" G6 g3 u: b
                        cout<<v<<",";  " b* }- \" S, x/ M+ F( X1 d0 q8 r
                }  1 m& {4 U2 w) |0 X+ b# t
                cout<<"\b}";  % T) V& @3 @- e0 s
        }
* S* F9 s, U6 u; \; O, p) v        else{8 I4 n8 {; s- v4 c$ r1 g
                cout<<"{}";
8 S! g8 L# x8 S& T( f' ~2 i        }7 r& T! E6 H" J2 q
}* S' f: n/ `0 m. C/ d* K

4 n3 r- T+ ?. Z& B% c) m$ F% z//容器vector中元素的去重
8 a4 E6 V. Z/ g& R& \; S# lvector<int> unique_element_in_vector(vector<int> v){; r- e* z  M9 M4 K
        vector<int>::iterator vector_iterator;
- A, E$ T0 f& F" W- v        sort(v.begin(),v.end());
$ O) a, w. H- K, d& y3 K. j        vector_iterator = unique(v.begin(),v.end());
  Y8 \( ?, t9 z, \        if(vector_iterator != v.end()){! g" A7 R# U: V9 ^" ^
                v.erase(vector_iterator,v.end());
  @) ]( Q/ A& |+ P  b0 N        }
# T$ h% b2 I* e6 Z$ s        return v;
& i  g0 O5 e: X}9 M5 o  `' {3 ?% Z& I* c1 c: b' O( L

* a0 j+ y0 F/ ]" _; u) x' m//两个vector求交集
0 ]8 ^/ r1 ^; v1 Ovector<int> vectors_intersection(vector<int> v1,vector<int> v2){/ {& \# }) J% l& c+ ^
        vector<int> v;  e  q/ O' O0 \7 c- N, g0 ?5 ?
        sort(v1.begin(),v1.end());   8 D) f' T- J% \5 l
        sort(v2.begin(),v2.end());   
  ?0 `' ~' a7 x7 j* d. t        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 8 u" w7 ^0 l- j5 ^
        return v;  \( [8 P) Z, p/ h# Q
}
  N( b9 O/ G- h 4 v6 w- j* D6 x; |% p
//两个vector求并集
' i' p2 L9 ?; s: d7 E: d" hvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
% c/ j/ d* y9 k& t8 X. j- J        vector<int> v;/ J3 t7 ^) d6 o# G! ?8 l
        sort(v1.begin(),v1.end());   + b# r" T" w; p) r6 k5 @! q8 ~
        sort(v2.begin(),v2.end());   & F  \' B4 k# N( v
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
( G* B: Z$ q- Y% |+ s        return v;
9 n- W# V( h" B}' ]# e$ n. [- Y* j. Q  Z  m8 ^" ?

( J9 r7 _2 k. h# i) a. \  }' w& M//判断vector的某一元素是否存在
* g/ p( N+ [: `0 z5 bbool is_element_in_vector(vector<int> v,int element){
# F* g7 v8 e! Q: k+ C+ L2 F  E        vector<int>::iterator it;
# i& N/ J, I( O& c% f        it=find(v.begin(),v.end(),element);: ?3 s/ k6 P7 `! o$ H' l( |
        if (it!=v.end()){
) c: T$ H! q6 s( D3 W9 F6 e0 `                return true;
' `7 ?; ^5 {. b( k        }
$ h+ @3 [' ?0 a/ S        else{
4 R' k2 H* A1 B9 c5 T' B+ @                return false;$ W+ m  o3 g# g
        }" a! `2 d' t0 Y2 Y
}
4 e; h( i( k: q* x
% D  m5 j9 X8 x9 uint main(){# q8 v# G; F# g1 r8 \3 E% K% |4 r
        vector<int> v1,v2,v;
! U) n1 N3 U6 \) r) Q% a        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
" C2 S% y4 c1 P4 c& }0 p( Z        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
- m6 M4 m) C! e( i        cout<<"对v1去重:";
! a% N) ], V" m( f6 \* v. Y. k7 c        v1=unique_element_in_vector(v1);$ J& C# D- j: \7 C; v8 E
        print_vector(v1);
, j8 F6 l6 O4 x0 k- v- f# Z6 B! Z        cout<<endl;# _8 ~" d% c5 n2 Y9 m% @6 P
        cout<<"求v1与v2的交集:";6 {* f3 i) D: S% o
        v=vectors_intersection(v1,v2);) C. [; v5 e! `
        print_vector(v);$ p/ I. q8 B# k# c/ ^3 }
        cout<<endl;9 f, {# Z4 L1 z( W
        cout<<"求v1与v2的并集:";- G# A! o# \6 t( k( l1 f3 ]
        v=vectors_set_union(v1,v2);
6 m4 D# q) p( Q/ P$ D$ r        print_vector(v);
! m: N* |6 y: w1 N* `, w# }        return 0;" G/ E4 u& Q! F& [/ L( Q
}[/mw_shl_code]
3 B  r% \  E0 w$ z% X! @7 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二次开发专题模块培训报名开始啦

    我知道了