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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
+ u4 n2 y2 l9 Q1 r2 C- B0 i

, j* W- R! l8 t" ?; K3 \8 wC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:) {- _% P4 x8 k+ P/ c2 f
[mw_shl_code=cpp,true]#include "iostream"3 {: ?  \% z$ }1 J7 n
#include "vector" . D7 J, N# @7 Z
#include "algorithm" //sort函数、交并补函数7 H* p! u" V  J* l' b$ @! [5 h
#include "iterator" //求交并补使用到的迭代器
0 _% y/ Q8 R' c3 ^& l1 susing namespace std;. Z5 m  f: z% Y. j" H
* l; K! t- n- U5 {  ^& |
//打印容器vector
2 A7 Z/ e' }' @- k( G  \6 svoid print_vector(vector<int> v){; j: U. r& |: Y& w% K
        if(v.size()>0){' V9 h; n& `/ E: X
                cout<<"{";  , D3 x8 P0 k" k5 X  C& |; j: E
                for(int i=0;i<int(v.size());i++){  / B* L0 A8 v5 I6 J
                        cout<<v<<",";  
3 [/ i* x' M+ x                }  
2 d% G7 C/ M5 W4 I9 ^' @                cout<<"\b}";  . g8 G* L, M3 Y' }
        }! L) B, ]4 @! O* A/ n8 Y
        else{
8 B& o7 E4 c. q& ^5 i                cout<<"{}";
8 v6 u( o' S% e  D        }0 w8 U" ~2 h% l; K, W4 G4 y
}
9 O  n4 Y9 X: n/ C 9 P5 M% x$ M& P! d5 F/ W& m
//容器vector中元素的去重! b( I' h- D1 ^% n+ R( }) R4 U& V9 ^/ k6 E
vector<int> unique_element_in_vector(vector<int> v){5 Z8 b; _% i% C
        vector<int>::iterator vector_iterator;/ i9 e1 J7 T5 l  F6 G5 e4 `
        sort(v.begin(),v.end());
8 y5 ?3 h3 E* W) c, h6 v        vector_iterator = unique(v.begin(),v.end());
$ p1 m# ]) k' y% L8 O) e        if(vector_iterator != v.end()){. v5 J# H4 N+ |4 N$ d
                v.erase(vector_iterator,v.end());
+ a1 w% f9 P' u: E        }6 j# T1 B! b" Q7 e, V) h
        return v;
3 X: o  U2 s7 |% i}
+ x9 B1 R( Q$ z/ |- b1 r+ ^3 ^2 ~ $ D' m- {8 r) o2 _$ x
//两个vector求交集3 u# ]8 H' q! F4 D- g6 R; y1 a
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
  n. Y9 g5 g+ o  ]- {        vector<int> v;
* R3 ^3 c. c7 P. l4 D8 N" a        sort(v1.begin(),v1.end());   
: f6 ~: G" P5 D1 b5 S        sort(v2.begin(),v2.end());   
9 C5 p! e+ G# ^5 o        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
0 ?6 L: q% v/ v* `' p5 s        return v;
) p! E7 f9 k- s2 v3 T' A}9 _+ R8 c2 {8 Z: Y
% k7 Y. {, q" z: f6 H' ^- K7 O& B
//两个vector求并集8 |# r4 g! H7 b9 t! [) S$ E" b
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
: Y; w) e( O6 o( e* d        vector<int> v;8 _$ u/ R; Y2 s, U2 Y6 E8 {
        sort(v1.begin(),v1.end());   
3 B; T. P# `6 l8 m% y5 v/ n& [        sort(v2.begin(),v2.end());   6 g$ U$ Q" H3 V1 P2 V9 ?; m9 @
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 . D4 b, Y0 z- a
        return v;
! Q. t2 w$ t7 d8 a}* r" i/ f& k/ J4 K5 h' G+ Y

" L1 i* L+ z  x+ T//判断vector的某一元素是否存在# T+ M# @* r* Q7 H5 y
bool is_element_in_vector(vector<int> v,int element){
" C; x) l  x$ O) A        vector<int>::iterator it;6 C. T' K; h" R# f5 d9 r
        it=find(v.begin(),v.end(),element);" \! c6 I& ~( N1 `4 j4 a
        if (it!=v.end()){
5 g9 X' L8 {& H  L                return true;
. x4 u0 g% p, T2 t        }
$ Y$ a) I: x: Q- |/ ?        else{" _* T, `( C% e% t: b' o
                return false;
3 H0 B. g' s5 J3 ^        }
: v" @. y9 k% K* \}' F- Y; J% p) N0 y. p+ Z" U
! \$ w1 q" m" E' H3 S
int main(){  U* t% t6 n, i0 P& A' s* p1 Y
        vector<int> v1,v2,v;
5 L$ w5 K+ b; _8 A, s+ I# o; b        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);8 ~; o8 N5 u9 p
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;; A# `) m$ B1 w. O; k1 q
        cout<<"对v1去重:";
2 F3 y" T$ X3 o1 S! ~$ Q/ J7 J/ p! T        v1=unique_element_in_vector(v1);
% z6 |. y: e) c: ]9 H8 d& |  N        print_vector(v1);( F3 y5 @4 o+ k8 t% W3 L; V
        cout<<endl;
$ Q7 b) b" j- W5 j* v- [  N6 Q7 ]; w        cout<<"求v1与v2的交集:";; x5 x9 m8 f3 R8 H* E
        v=vectors_intersection(v1,v2);7 z3 f- r( N  E; _
        print_vector(v);7 F& H) y8 n) ~1 H% u! S. {
        cout<<endl;/ Q1 R) B2 F+ V6 W0 B7 @
        cout<<"求v1与v2的并集:";
: o  U# a# ^  v2 l% ]        v=vectors_set_union(v1,v2);
3 `/ v, p0 e* G8 O& q; d        print_vector(v);
3 i, V% z- d  N        return 0;
5 R9 e# b& M, n1 I6 u! f}[/mw_shl_code]. T7 r$ [) J; E, X: G: c
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了