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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
" s: O# K8 C0 {/ j
# x  [6 x+ y1 o) {# a
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
: L. O) W2 f: ~% G[mw_shl_code=cpp,true]#include "iostream"
5 F0 h' d& t% ?) j2 L) x#include "vector"
' C" v: W  M- J1 [#include "algorithm" //sort函数、交并补函数
8 |$ {. z7 l" _3 E$ {7 }#include "iterator" //求交并补使用到的迭代器
  `, }; ~$ Y8 ausing namespace std;. q% F1 K0 M1 e& ^% X

% e3 ?' N3 n  j. ^//打印容器vector# Q5 M8 |# L( W( Z2 p- F9 V) T: K
void print_vector(vector<int> v){
. @9 X) z5 y. n# e        if(v.size()>0){
1 F; o' _6 E; Q' K) Q- u4 g                cout<<"{";  * u: [$ m7 w1 ]' W
                for(int i=0;i<int(v.size());i++){  
# W8 I! l" B" N0 E                        cout<<v<<",";  4 I# s1 j2 N/ R/ c! ~' L
                }  
9 \- ^5 U. x9 h: W; M4 \3 h8 \                cout<<"\b}";  : ~+ Y( a2 q2 u' s
        }
7 l9 a$ v4 N; ?: G% ^0 j        else{
! s6 D$ |& e" {                cout<<"{}";
* _' R$ S+ U, \* o( P        }
4 Q0 R, H( @( v}
) N0 H  d1 |5 w+ [
0 K# B& F# Q, i3 ?% g9 p//容器vector中元素的去重8 L% {  m$ `5 ~* E; N) K7 r3 |8 F
vector<int> unique_element_in_vector(vector<int> v){
& j% Q0 T& ]; t( x        vector<int>::iterator vector_iterator;
$ v0 `, r0 D( m- z& g        sort(v.begin(),v.end());+ u( A# Z# `* @- R" ^
        vector_iterator = unique(v.begin(),v.end());) c$ z; ]8 V, p; r
        if(vector_iterator != v.end()){1 t0 c3 N1 T+ ^3 ^! u
                v.erase(vector_iterator,v.end());2 L$ k3 ~3 ^$ }) D7 I: Z8 w: V
        }
9 b6 X# @9 e" a, g1 U# Y+ Q. }        return v;" S6 U9 X( _* _
}
! S2 _% A, V, G/ `
  x" J2 q% O. x) k) W. U. D$ v//两个vector求交集# a) a+ T, ~( {# k
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){2 m7 f, B9 y- q9 p' w! D$ Q7 Z$ c
        vector<int> v;
7 b  [* l( v% ]6 I2 ?        sort(v1.begin(),v1.end());   1 l5 e8 _9 I, F& V, T
        sort(v2.begin(),v2.end());   
2 f' q: `' L1 B3 S0 r9 d/ v' X; h        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
! l7 M6 d0 n7 {% a        return v;" h- [. O* H9 g- e! W
}
5 I; {; i  Y+ @ , i  r5 B! z9 X- S: n1 p5 |
//两个vector求并集
- B( }) _" v% vvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( |7 D8 u9 ]1 n        vector<int> v;$ r. l; x2 D2 [  D
        sort(v1.begin(),v1.end());   
9 q" E  N9 F% n( w9 b        sort(v2.begin(),v2.end());   ; d" R; r2 u4 b4 E" f) M9 ?8 m
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
1 J' A' y* u/ K; D3 \0 \% v        return v;
8 _" g7 A. N, n  Y}; B+ F+ `: G* b9 ~; d/ |' [' n0 }

0 A* G; |5 ^+ r9 l* T//判断vector的某一元素是否存在  m, x( ~' Z1 t% G5 l8 o  f
bool is_element_in_vector(vector<int> v,int element){+ i+ ^8 c& [- v
        vector<int>::iterator it;
7 j5 }1 B9 ~4 R0 s        it=find(v.begin(),v.end(),element);* e& O+ M1 s% a6 h- G9 {
        if (it!=v.end()){
9 i! a3 z7 k6 z                return true;
% ?. M9 G- F7 f. \, H% O, p        }
8 ?% L  A" B1 i+ G& a( @9 K7 {# H        else{* t- X( V% s% O2 d  f7 L8 @! Q
                return false;
( O1 _, S. g( i+ y# x4 ]        }- L- ^( D% K9 x0 n% x) m  |
}, [  U( f- v7 v* a9 B
: C- c' w0 v2 T( M, \" E
int main(){9 O, a" [: I; |9 z
        vector<int> v1,v2,v;
5 L" ^5 ^1 Y% N" E        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
* Y" L3 ~/ v2 B. c) {2 }0 I4 W        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;$ [# F: f! E# `! f: ?5 q. D) y
        cout<<"对v1去重:";
0 P1 ?3 Q$ d" V" V  Z2 g: t        v1=unique_element_in_vector(v1);
8 Y- t/ I' |  m( ?0 Y3 Z        print_vector(v1);
8 H' U( O. J- z7 v        cout<<endl;
, L$ c/ W( T5 D& Y% h        cout<<"求v1与v2的交集:";+ R2 {- |+ }5 f
        v=vectors_intersection(v1,v2);$ y' a7 s' v7 C: B* l$ o0 g+ y
        print_vector(v);
* U9 E9 ~) S1 }- h. p        cout<<endl;
: P, b4 h# N/ N% g* c& a        cout<<"求v1与v2的并集:";
, B; T' C  g5 o        v=vectors_set_union(v1,v2);, \: v9 \" g8 t% Y- L; r% w
        print_vector(v);; `7 J6 M" }: E3 P, ~! V0 g7 m
        return 0;
: F8 q5 W, u9 L; Y" a, V9 M% \}[/mw_shl_code]
# R- V& q! A! @. w6 J& p
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了