查看: 2741|回复: 0

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

[复制链接]

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2018-7-2 19:41:23 | 显示全部楼层 |阅读模式

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

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

×
8 C& o  n- r; j

: C8 G3 ~; [1 {8 d, }9 nC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:0 }0 X# V6 E! B5 ]- O7 B' O+ z
[mw_shl_code=cpp,true]#include "iostream"8 u2 R" c$ t$ d! h- a
#include "vector"
8 j3 Z: W/ o3 c5 `( y#include "algorithm" //sort函数、交并补函数
/ V1 D6 q  a7 T" ^3 i3 @#include "iterator" //求交并补使用到的迭代器
: S$ T+ ]& h' ousing namespace std;6 b3 y- E  }! U& x7 h
! J+ v* `6 [3 \$ r; D1 i
//打印容器vector  v' C7 v2 z9 x0 U6 |: l' _" |
void print_vector(vector<int> v){
4 M# \4 p! t" K" M4 d! N. C        if(v.size()>0){
! F; n$ P/ c! z; T1 H* ^                cout<<"{";  
6 c. N4 |" F  _1 J$ b, N                for(int i=0;i<int(v.size());i++){  
+ Q' W$ k) D4 c, O                        cout<<v<<",";  1 F' p) D& a  K4 S- g3 g
                }  ; E1 Y' G+ Y6 K5 c
                cout<<"\b}";  - X" S' E9 b0 P/ ?) l; s8 }
        }
) k( H1 |; {4 c! o% Z4 D0 S        else{8 z+ K! e2 a, i; _- Z9 @- ~$ X
                cout<<"{}";  t- G: \+ |8 a9 p. P
        }
" J; {7 Q7 i0 b, n% @/ B: E5 U/ u/ p}
% L: G* U$ R  d- A! O4 |2 K . U  E4 L9 {* w! p% A: I, q7 V3 V
//容器vector中元素的去重
% `/ v5 L: Q, Y, f0 M' C4 Kvector<int> unique_element_in_vector(vector<int> v){4 g6 O% P" U8 l; J
        vector<int>::iterator vector_iterator;
; _$ R% A9 x. [, c' V( t: K        sort(v.begin(),v.end());
2 {2 j1 j5 G9 P8 }        vector_iterator = unique(v.begin(),v.end());$ d. m2 F' ]' Q+ @; f0 \# H
        if(vector_iterator != v.end()){
# u* Q" C9 Z7 r- ?" v" w9 y                v.erase(vector_iterator,v.end());9 d6 F. e6 `( b
        }# d" m3 H3 W4 }9 r9 j+ p
        return v;- M  @% d. i$ }0 T7 K
}
" s- G0 R" O' e( n" C1 T  N
' C0 [, r- F6 l+ U# w/ Q//两个vector求交集. }4 ]  i- O! x0 B* X2 l+ y$ t! U, ]
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
0 v0 O; x: D* Z1 y: k, [4 A0 W8 m        vector<int> v;) ~8 n6 _- u7 i
        sort(v1.begin(),v1.end());   * u0 I4 w" g! x) w/ r
        sort(v2.begin(),v2.end());   6 s0 h( Q( y9 l: M1 i* F( t
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) F3 i/ E6 k0 |( K        return v;& m0 l# d. W5 B* M- r$ w
}
/ n' B  Q! ~# G' F+ _& C / W8 I( s3 O- Z6 ]' C% D  `, i
//两个vector求并集" a- a; l* x* |5 x( e2 _( B
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){/ f, A! M  a6 R2 o5 a2 K; K% E
        vector<int> v;- C  ]( }: y2 V/ e
        sort(v1.begin(),v1.end());   
& u8 T8 R. s$ K# f  X8 @8 U        sort(v2.begin(),v2.end());   
8 ~8 I  @5 w4 D9 j7 i        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 / ?5 r+ D" l! L6 `. ]- c
        return v;
; g5 u+ L) y2 U4 d}
5 h7 X7 B8 h2 z4 m) o9 |! \7 n
* |% v# S3 M+ ^4 [//判断vector的某一元素是否存在
! A/ J. K1 q# Z! fbool is_element_in_vector(vector<int> v,int element){
* A4 U( V5 d$ x7 O        vector<int>::iterator it;
% J7 X! X/ u% _5 t$ Q. l; H& r        it=find(v.begin(),v.end(),element);
7 _+ F; c" w2 V9 o/ H- Z4 I4 ]        if (it!=v.end()){# a( k- y' j/ c9 |2 \
                return true;
4 w5 \7 z8 R+ g. v# V        }
; K& H1 v# x. {1 y, ]        else{
- y. {- Q/ u: C8 ~                return false;' L5 T" y$ Z' ?. q/ x+ ~
        }: D) \% l( X/ h0 O* H
}. v2 d: @6 B% L  k; i8 p

# X! ~4 i5 \9 |+ \! zint main(){
- d8 D5 {5 c7 T5 _) D. n; [        vector<int> v1,v2,v;6 p9 m$ B1 R5 ?/ {) l
        v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
1 n/ j( Y$ o( W" Y. |        cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
+ {: W6 Q, h, b- [5 ^        cout<<"对v1去重:";
3 }7 ]0 L. u! L3 l        v1=unique_element_in_vector(v1);# O  T  w; q! R) j- Q( ^- Q% y
        print_vector(v1);
! ?/ e% l5 a. p1 l. M        cout<<endl;
  J! m" s. P7 y7 f- U3 Z6 E. U        cout<<"求v1与v2的交集:";
# H, [4 S. m: B& Z, h0 c( c' i        v=vectors_intersection(v1,v2);
( U+ S4 y4 N& B1 h1 z6 d9 p8 s        print_vector(v);7 V1 k! `, S( M6 ^8 @) C
        cout<<endl;  R  C: i7 z* @- d
        cout<<"求v1与v2的并集:";
% n0 {5 b$ ]# g0 ]  m        v=vectors_set_union(v1,v2);% z) n/ S3 A& z; b3 V2 ]9 `0 p; X
        print_vector(v);. ]3 \- B2 k/ `1 |
        return 0;- n# \, I% y  g) h- O# a% ]0 j
}[/mw_shl_code]+ A5 n  D  |% N4 c  U# r" a
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部