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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
* j: K; A1 |; n& D

6 M; C1 c# H. e. u' V0 NC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
: e. n5 u; i1 q  Z6 B5 Z# p% [  C[mw_shl_code=cpp,true]#include "iostream"
  Y2 q! W% @1 W. @  _5 `- I#include "vector" " V2 Q+ W; M0 [% M# r* e
#include "algorithm" //sort函数、交并补函数7 p8 v! R! X8 i. g+ O2 m2 o3 g
#include "iterator" //求交并补使用到的迭代器
% ]" m/ F$ O0 n( v' Q" C: husing namespace std;0 k, e$ D$ @  i( E0 A' I
; |# d% b! L7 e5 T. \2 u
//打印容器vector
; ?$ j: C* Z0 r2 B8 Ovoid print_vector(vector<int> v){
. U7 M) j" o  `# c7 j        if(v.size()>0){+ x! ~4 o9 Q7 r+ x0 b
                cout<<"{";  ! N; W0 u+ s" V7 D+ h9 P  [
                for(int i=0;i<int(v.size());i++){  
2 }9 a" W+ r# p# [1 X4 R                        cout<<v<<",";  7 C; `# |) J7 u# Y/ p
                }  
2 l4 q$ _( d0 z- o' N                cout<<"\b}";  
$ M2 T% w  J: g8 o        }
$ K9 X  j' E3 _& h; l4 o        else{
* W8 }! j. O9 j2 o                cout<<"{}";
: p  p6 A$ {" l: _; ]' G2 v6 B0 H        }
% f3 I# F1 K, W9 |}
  x9 W1 q1 w" y$ k
% l. B) i: U4 s% N* D//容器vector中元素的去重2 |  c$ u, Y+ U) [6 H: w
vector<int> unique_element_in_vector(vector<int> v){7 Y  P- g' k5 x* H, l
        vector<int>::iterator vector_iterator;
0 i9 G7 m: @/ Y2 T& @4 M        sort(v.begin(),v.end());. t( ~, C& }2 \8 C
        vector_iterator = unique(v.begin(),v.end());: X( g4 X- t& O( U, @. _
        if(vector_iterator != v.end()){
& U# b  x' `4 \# Y. ?                v.erase(vector_iterator,v.end());
0 `% R2 H6 D" l2 M0 ^        }
: F! w5 p- O6 i" D0 E' ?- U' j- m& A        return v;) q. j# U3 \. f8 l; ^* f. V" h
}9 N) \$ G1 E/ i$ g1 X% A( U4 b

1 B: L2 i3 I- p9 s$ c//两个vector求交集5 g$ Q6 R. i# _
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
2 q+ f( J) f- E        vector<int> v;* D4 h4 A* E/ ]) O
        sort(v1.begin(),v1.end());   
4 \& I' P, p* ~        sort(v2.begin(),v2.end());   
3 u& y( o9 h$ @+ f  g        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ V" t% z" b# ~/ K8 ^+ e
        return v;
- K7 \; I  {  ^9 y& @" z}  d* a2 L+ l$ v/ V2 t* I) T! z
$ @) J$ E" ^; k- R( S
//两个vector求并集. B7 W5 K7 p+ \7 k0 z8 l
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
3 C& v8 `' J7 u  R/ u9 y  J# M        vector<int> v;$ y5 D' \  Z, w3 G- q+ b$ k
        sort(v1.begin(),v1.end());   + R. R7 H6 U6 x. N# V
        sort(v2.begin(),v2.end());   
+ m+ C: d2 a: ^. z        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
7 B  C# o% _; W8 D0 O1 O        return v;8 i, o- M7 s" \% Y% j/ W" S
}5 g* H/ e$ c, O# P
' S1 q  x8 `% M6 Z# p
//判断vector的某一元素是否存在$ _# k$ m9 d, K) b9 O
bool is_element_in_vector(vector<int> v,int element){7 `9 a% j3 p& t8 d7 d; W
        vector<int>::iterator it;* w7 Y' M" ~9 x/ _
        it=find(v.begin(),v.end(),element);
- G% A8 Q; e/ o$ ?, r% [0 A6 n        if (it!=v.end()){
4 a* o: }) b. p1 z; f                return true;8 d; r" {1 g( c
        }$ q- P0 c, O! L
        else{
0 m; N. Z( f1 d/ P, h( ~                return false;+ B0 E4 e7 l0 z+ P' T
        }+ a* t6 W$ x7 j; g6 `4 e7 T4 v
}
0 @, ]) G. S4 L& m 7 ?7 G/ f5 |$ y5 R. \
int main(){
6 B9 D+ \* k- C: g" d" S        vector<int> v1,v2,v;+ R) R) J9 I% r5 R" r/ B" s
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
! {; B* |- b1 D5 z7 i: k' F        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;7 _6 t" U* [9 {  q; W) J
        cout<<"对v1去重:";6 ]" d' {/ P; {" s9 w# [+ U9 y$ W
        v1=unique_element_in_vector(v1);6 M' G; f: e5 q% J7 ^* g
        print_vector(v1);; t: g8 g/ s5 ~% O
        cout<<endl;" v; z7 w. `4 o; |, v9 c
        cout<<"求v1与v2的交集:";5 m2 ]4 \2 v7 C
        v=vectors_intersection(v1,v2);$ e& D" n6 n6 h
        print_vector(v);' w- z& e$ Z# |/ N$ e- D& l7 k
        cout<<endl;* G8 u& E( `! B) K& f9 s5 o" }
        cout<<"求v1与v2的并集:";
0 b4 B0 v* E2 `. K9 S8 b! n5 c        v=vectors_set_union(v1,v2);; e$ n: M: e2 p1 R% u5 |$ u# d
        print_vector(v);8 V' Z# Q, C4 Z* S. i+ j
        return 0;9 q8 D6 Q$ J/ k+ q2 P( a/ {3 y( v
}[/mw_shl_code]# _2 l+ Q0 S6 Y! G6 t8 y3 D
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了