PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
6 H8 v- {, `4 c" ]
$ M" @! ^; s! x( R2 O3 {
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
7 N. s1 ]( {1 ]8 `( Q! K2 F+ k( c1 V[mw_shl_code=cpp,true]#include "iostream"
7 A& B  h* l0 o! R2 z. a. j9 w1 U& s#include "vector" + U. \; X" o- x$ r
#include "algorithm" //sort函数、交并补函数
% R8 k2 i) s$ u* E#include "iterator" //求交并补使用到的迭代器
9 m$ Z+ g" l9 Y2 Zusing namespace std;) X9 E3 ?" {/ i. ]

6 ]( f5 T3 I& J% S) h5 K//打印容器vector: i* w6 K) n: O! j9 o, G2 d: y
void print_vector(vector<int> v){" Q( e: I3 P, R9 c  T( F! t
        if(v.size()>0){5 }3 G/ r8 K- t1 \* r9 t) P! l) G
                cout<<"{";  4 B) C' Y9 j  n" k, c& |; {
                for(int i=0;i<int(v.size());i++){  : l8 F9 P: B, l5 Q8 a
                        cout<<v<<",";  
' N  U% u: m. z- n' T                }  
; g. N; `( Z+ S% W" P, M) [) Y$ b                cout<<"\b}";  : B9 g  U) O) L5 X' M: w$ S7 A
        }
0 u0 _  d7 Z: N7 a6 a+ }        else{
: ]4 y. X- J& e% z5 e9 A+ t9 D5 ?                cout<<"{}";2 n& s4 s% ^: }. R9 M( l
        }5 T0 N2 X& b/ p# @, z5 B+ W
}
: _+ y7 @( i* q; ^3 \
, K5 D* i% H) {; ]; F; w. `//容器vector中元素的去重7 Y/ ^3 x! ?6 X: v. [# G0 l
vector<int> unique_element_in_vector(vector<int> v){
- O1 i& P+ N2 l% I1 |& C3 N5 G) @+ ^' a        vector<int>::iterator vector_iterator;5 g4 g- a  E: p7 I8 z/ o/ s" }
        sort(v.begin(),v.end());) k' X7 J  J) B  m/ O2 }
        vector_iterator = unique(v.begin(),v.end());+ `! p/ S* Y3 b/ i' K7 a
        if(vector_iterator != v.end()){6 d0 x; E" s% |! o  P: N
                v.erase(vector_iterator,v.end());# K$ C/ h  I5 v4 B4 {4 a- V
        }% s0 E6 _3 A# C  z, K! F/ u+ ?* m, a- D
        return v;
3 [  J0 J& K( A; J1 j}% z" l7 F: _* L
7 L  J/ P8 A+ r' ~0 J+ F. ~
//两个vector求交集
0 Q7 Z& p- O" N% Vvector<int> vectors_intersection(vector<int> v1,vector<int> v2){
* M  s% J+ I! e" i' P. M        vector<int> v;
; R0 H/ y, s( y/ `        sort(v1.begin(),v1.end());   
0 S1 b& ^3 g& s5 m, }        sort(v2.begin(),v2.end());   
8 l' V0 Y* B- p. H5 A% K8 n/ t        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 3 e. T* i5 F: ^# D" v1 z/ `
        return v;8 \0 C1 w. A, S0 j* t6 }4 {
}
5 t0 }0 Y2 G8 D. R- y# \+ _  x3 P6 [
7 E* P& o2 w, Y; D/ S6 K, N4 H/ [9 C//两个vector求并集
0 O1 w7 |) m! X* W! rvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
# L; N$ d. m3 S6 K) @# x* d% A        vector<int> v;
; i. k- m, i3 L        sort(v1.begin(),v1.end());   . y* H2 [( J- |) F  A! M0 _) M
        sort(v2.begin(),v2.end());   
$ W5 h  A( k) c! \- L( }! M        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
& j# P3 Y6 w9 @' x5 T7 F        return v;
9 N$ R$ H, A0 X9 b2 P4 r1 v' P}. f# l1 a( T! K7 k

9 R7 a6 r7 v0 h$ g//判断vector的某一元素是否存在  O' T4 f, E) f6 j
bool is_element_in_vector(vector<int> v,int element){
' _, N* C; f4 m: n        vector<int>::iterator it;7 e0 Q  P1 X" N. X1 @
        it=find(v.begin(),v.end(),element);
- J9 x4 p; h. q1 b  {+ X: [+ P        if (it!=v.end()){
* D' ]/ h9 R4 I  e$ @                return true;
0 B$ `' m0 _; m8 k' w        }
2 x/ H# t/ C8 J7 m3 D        else{& h8 S- ?, H, c9 p# {, V4 F; V0 l7 {
                return false;
! P; {4 ]9 H$ E) i7 x" Q! B        }
# a) ?* I% i3 G) ?. p& v% Q}
, }6 h  C1 h+ J. z" W8 p9 M
8 e/ L+ e% S0 x  I. v+ Pint main(){$ ?- O$ A" M- m& e8 a
        vector<int> v1,v2,v;# W! a  w1 t2 S( L
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
2 E( @/ S2 T0 ?" L) A% E5 C) h        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
/ ~2 K# y8 G6 E5 f7 X        cout<<"对v1去重:";
: t( s4 w* Z. e$ M0 D: }        v1=unique_element_in_vector(v1);
4 y5 J8 R! U4 m/ y  f+ G        print_vector(v1);
6 g5 U* {0 l% i$ t        cout<<endl;
3 E. x1 O* K- O% Z7 H/ r        cout<<"求v1与v2的交集:";
9 {5 q7 V/ {- ~' L0 s. ]. \: H        v=vectors_intersection(v1,v2);
6 S  C. ~; c8 Q: t" h        print_vector(v);
6 x$ v6 D# Y3 k5 U( U        cout<<endl;
( l% |$ ]# a: x" m* {$ ]/ E( T        cout<<"求v1与v2的并集:";. k, W) P# Y# @6 w& W
        v=vectors_set_union(v1,v2);
# T6 ]9 R; Q% H! R' r: Z" b        print_vector(v);2 |# ?4 d) {+ a% A* f
        return 0;% ?" G4 v/ R! J( h( U0 R
}[/mw_shl_code]
: A; |+ J8 ]+ t* S  M" A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了