|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 a* [2 m/ j; n8 C
( ~/ e4 @, ^" K1 r3 g) d' B7 eC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
9 e) q0 m. l9 Q$ z8 I3 y[mw_shl_code=cpp,true]#include "iostream"5 }7 a# ^6 [2 J! h. v8 h
#include "vector" 1 V& O) n& \* y5 \/ A t
#include "algorithm" //sort函数、交并补函数- p0 Y2 V2 P4 m
#include "iterator" //求交并补使用到的迭代器
5 g9 r( f* Z0 `8 F9 y. [using namespace std;! i5 y2 k1 U. _$ ~
+ t8 X |; |% o% V6 u# T$ D//打印容器vector$ K9 F, `( z* U$ `) k
void print_vector(vector<int> v){
9 E J2 D \, } n* Z( J! O if(v.size()>0){
1 ]/ _5 V- l" s cout<<"{"; 9 R8 z( t2 H6 D% b: D2 x" S5 n$ _
for(int i=0;i<int(v.size());i++){ ; f$ g: B1 z3 A5 n, M
cout<<v<<",";
( U" T4 L# e+ y! y+ ]+ Q+ l }
7 |) I c: b; {/ V" q cout<<"\b}";
9 _ P; J- I) h% e1 A& p% u }
: H) S I, C$ b" ~% e6 A else{6 V1 a, |8 H |4 B
cout<<"{}";
) S2 E, D0 ~& n0 e3 a% B1 e }
" F0 z* [, m/ X1 m( w}) J9 Y. q7 i7 I) N/ H
7 e9 U; i1 W- H/ ~//容器vector中元素的去重
, t0 m o: M4 X, ]- T2 X/ t$ w3 V7 R6 tvector<int> unique_element_in_vector(vector<int> v){1 B, M% M# V, ^9 C- o6 e
vector<int>::iterator vector_iterator;
, j- k8 B- h6 u& L4 o sort(v.begin(),v.end());# \0 U5 w7 F" H$ z$ F( U' {
vector_iterator = unique(v.begin(),v.end());+ _& G) s9 [ w; ^) D, t$ d& y- R
if(vector_iterator != v.end()){* X4 H X0 M5 Q# G: d6 Q. Q
v.erase(vector_iterator,v.end());
W+ M! p c0 _+ b/ O0 s! k }0 d: ]4 y+ W/ [8 F& W e
return v;5 ^4 E6 Q# l" W/ p, g
}
# F+ b. f. w# W. v1 n; y 4 q& f4 G B: L/ b. L6 M
//两个vector求交集) X" \4 S) B( l
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
3 _- Y/ _# f, P vector<int> v; a3 e5 c& U2 a: o' _% E Q+ ?( P
sort(v1.begin(),v1.end());
6 o% A7 v' L- S sort(v2.begin(),v2.end()); 4 C0 A1 h. G1 f* \1 @
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 5 t+ C* G0 l9 J" P
return v;
5 v" z' {* R8 T8 `}
! [$ b n7 B z: X( @ s; Q3 ?
/ t; C+ O3 B/ Z) m//两个vector求并集
9 q$ I. X) f9 o$ r: ~ P0 ~vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
. |0 L: m8 A. b vector<int> v;
2 d4 w3 i9 s! x- M2 o sort(v1.begin(),v1.end()); . F: T) l( S& }
sort(v2.begin(),v2.end()); " y$ }$ G( J. e9 g
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 1 f% i- g! T e. e" l( w( x! C7 | u$ }
return v;& D& y% V' G P
}
' ~$ j4 A. g5 y3 }/ a
+ F3 U) y2 ^1 X( i$ {6 M# s//判断vector的某一元素是否存在
* Y# w1 ~ Z7 m; Q! Ubool is_element_in_vector(vector<int> v,int element){
8 ?/ P" ~2 X! R9 Q* ]2 ~4 ] vector<int>::iterator it;
2 f& ~0 p; b* \ B3 W0 [, O) Y! r it=find(v.begin(),v.end(),element);( G$ |: c" L, X7 l3 m( u
if (it!=v.end()){6 l- n0 {% @' {2 r
return true;0 B1 Y" O2 ]+ R3 S$ z' G
}
3 O% E, |8 j; e& {* k else{
8 c* ?7 C$ B, c& y) x, P return false;
9 g" [+ l I/ y7 @! m1 y) T1 B }
, k7 e' N/ }# y, C( F* { q}
& B! X4 k6 u1 J. V* M , b5 q$ J5 x' o% o6 k% n; s. x
int main(){
, e7 G4 W& J( h) r vector<int> v1,v2,v;
# a. g8 C0 P8 ?8 S! i. p& \9 u v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);* s, J8 X+ S% D( V
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
A4 K( O+ h2 S* O6 W3 [2 ~4 d6 [7 \ cout<<"对v1去重:";* {- X4 v3 {0 ?/ v# X$ a
v1=unique_element_in_vector(v1);& O) T9 I& a" @4 L9 l3 G
print_vector(v1);
( E d4 N% H/ D: ] l. Y) E2 `, L cout<<endl;1 B+ z* ~6 u) F
cout<<"求v1与v2的交集:";8 s0 |% I* v I% N& m7 i
v=vectors_intersection(v1,v2);
' Q* h! m# ^3 N) |% n print_vector(v);
O# m% `1 M# f: M3 j2 u4 H cout<<endl;# t1 D3 Q5 F! n* ] K
cout<<"求v1与v2的并集:";
' x5 M, T0 u& B, l v=vectors_set_union(v1,v2);
7 H& s# F- t% K7 w* i! Q+ [0 N& M print_vector(v);
! h ^9 {: v7 u3 W/ U return 0;
+ Z% j- Q" Q+ K/ h: N: I+ }}[/mw_shl_code]# M$ r: v% o* F2 w) M& n
|
|