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

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

[复制链接]

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

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

admin 楼主

2018-7-2 19:41:23

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

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

x
: X) r5 l0 v( w3 l9 p

5 n- d2 x, C" b- v# mC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:1 h  ?0 W9 D" M0 {
[mw_shl_code=cpp,true]#include "iostream"
( g1 {7 q: ]& q* @#include "vector"
7 P" _, ~' N" Z#include "algorithm" //sort函数、交并补函数
  A1 ]# y+ ]8 I2 d8 x9 h- U, \#include "iterator" //求交并补使用到的迭代器8 I9 p3 n! Z# m
using namespace std;
% V+ C) _* Z  c; R0 f1 ~# e) P7 l # {) w: s$ H6 a1 i
//打印容器vector- i% Z6 M$ z3 Y% Q$ L
void print_vector(vector<int> v){
, ]. D* Z. P. _& ^5 ]        if(v.size()>0){2 u* @& d7 M( A: u
                cout<<"{";  4 a$ P+ u( a0 l6 L' ^& n; L' y
                for(int i=0;i<int(v.size());i++){  
; G4 i  Q5 l  g" V, U, \                        cout<<v<<",";  
) ~% D7 q7 P  q: V$ p                }  
" z/ F+ ?/ l0 u. b3 G) X# [                cout<<"\b}";  
  U+ |8 g8 w3 z7 _7 N1 n        }% s4 o, v0 X8 o3 |: \( Q
        else{
* W6 \- v% m, w, {                cout<<"{}";
1 [! [+ \" Z4 r$ _        }
' [+ v7 p, u, g/ U! t}
; h1 `: @  F8 h0 W
0 q2 }+ m8 [" G9 X//容器vector中元素的去重
( V1 h( G8 O0 L4 N4 P& S0 tvector<int> unique_element_in_vector(vector<int> v){
" Z, F9 e0 s+ C4 C        vector<int>::iterator vector_iterator;
( }- z  j7 q4 m8 l; y! b        sort(v.begin(),v.end());
  q( k) Z& `3 c        vector_iterator = unique(v.begin(),v.end());
  z+ I) N6 i! s% Z& ~        if(vector_iterator != v.end()){
& z0 `7 {5 Z6 i' X" d                v.erase(vector_iterator,v.end());' U+ i- c' K2 p6 c" h3 q) V: [
        }
4 v# T/ c- ]# h        return v;3 ^6 a2 {& U5 o6 e  J6 ?
}0 S1 F: l$ N. z9 o8 w2 U4 N: ~1 f! O

- g: M4 `- Q2 X& C//两个vector求交集
& y5 M1 W0 f5 k* f8 E' Evector<int> vectors_intersection(vector<int> v1,vector<int> v2){
) p4 h/ @% q2 W        vector<int> v;6 |* R6 E4 ~; q4 t3 c: J! ~0 `) D
        sort(v1.begin(),v1.end());   2 e; N2 X4 v) J
        sort(v2.begin(),v2.end());   
5 h' q6 |& W  p        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ F: M" y+ U4 {
        return v;  B& z; e2 o: s/ f# f; `2 Z
}: @. j- S( N% `' P5 V! Y; @+ s

" i* ~- s; `- s5 F; _//两个vector求并集
( M/ ]% O6 }3 ]) v2 r- ivector<int> vectors_set_union(vector<int> v1,vector<int> v2){3 {# I' E: q3 b6 O& L
        vector<int> v;
" [' X. o6 }/ Z8 U9 o7 G        sort(v1.begin(),v1.end());   
3 S. v( ]3 E- a7 A. q% g# M        sort(v2.begin(),v2.end());   1 m: J  g$ I+ U8 d+ d+ P
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 i: {( n& Q' V. I5 }5 p8 q# F2 `
        return v;
! `, o- ?/ [/ A' F& ]8 S, t' \* y}0 X$ A8 T$ |: Y/ m- x

; Z& P/ ]0 w  F! y. w4 l//判断vector的某一元素是否存在! }0 \! a1 e3 a8 [- Y0 U; f- y1 {! n+ S
bool is_element_in_vector(vector<int> v,int element){5 J3 t. |" O8 T9 [. l: S# t/ i
        vector<int>::iterator it;
7 q: f# ]6 ]2 c/ X        it=find(v.begin(),v.end(),element);# z9 x7 o9 d9 `' {
        if (it!=v.end()){
0 |2 t- }( `, T' ]                return true;
5 e# r2 E8 {6 O& |) v& x9 h        }3 k5 H% t7 v/ B' J) M+ \% X2 z6 D# \
        else{
: L, m9 e% s/ `, o( \3 D# p+ Q                return false;
7 g* l; ]) t9 p! X' D4 l$ _& Z  m  H        }6 I9 B: [7 R+ z5 x) v9 M7 |9 v
}2 f! i$ _9 |) |

: {9 h& D# B+ X! ^" x! qint main(){
$ U- @% p/ @  x, i" d5 t0 [; ~# j        vector<int> v1,v2,v;
2 _. T9 l, \. R8 _, j# D! G4 ]        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);' E' d7 r, i5 v; a. a
        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;$ B: i& {3 [, G. c& g9 Z
        cout<<"对v1去重:";
  W  s( X' T  L* s, K" w8 j        v1=unique_element_in_vector(v1);! `3 K% t+ l1 `4 s- t2 k
        print_vector(v1);
+ ?+ z6 E' c! v6 h5 O' H' S        cout<<endl;
  ~3 @* I( f$ W( w! S        cout<<"求v1与v2的交集:";6 {3 s4 z5 {% n: ^4 H4 q7 b
        v=vectors_intersection(v1,v2);
* P/ y8 }/ N( A6 n6 ~" P        print_vector(v);
8 P+ n4 W: e8 S0 A- j, ?        cout<<endl;
# A; W: x# p2 U$ K# u        cout<<"求v1与v2的并集:";
* i+ a9 |- T9 u        v=vectors_set_union(v1,v2);" y! i* |9 c/ K$ e. A3 L: X
        print_vector(v);
# Y3 r, W% _! D% g        return 0;
; A7 {- W& p6 O$ X6 ^; E0 ]7 W}[/mw_shl_code], s" [+ S0 X: |
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了