|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 J+ p' E7 L# m3 \, w# u; [" J8 r q- S+ A7 [) ]6 b' K
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
- i" E" t( O6 ?: V* ^[mw_shl_code=cpp,true]#include "iostream"( _- {, o0 r& O/ U
#include "vector"
+ I! ?# z9 X) ^' v4 D: n. z& z#include "algorithm" //sort函数、交并补函数 g7 E8 Y# J& u5 u* D' {, @4 w: U
#include "iterator" //求交并补使用到的迭代器/ J6 m2 }$ c6 \( z
using namespace std;
; _/ |0 l& a- s* @
+ r- q+ L4 Z: k- P//打印容器vector7 T, W6 p' p# M8 f" `; U
void print_vector(vector<int> v){: a0 s, y& c/ w6 r: C4 D
if(v.size()>0){
3 z8 ~$ U& K1 m' A$ q t cout<<"{";
! x, _, s4 d' M9 H' @( @ for(int i=0;i<int(v.size());i++){
3 i0 K( Y4 I0 i$ m6 {% C cout<<v<<",";
8 s8 ^/ a4 r+ I' p: d9 J }
* m4 P3 h* H+ |$ A3 D cout<<"\b}"; ( B% p6 y R" b3 R4 \, D
}* [# L& X: q4 x
else{
: B2 M. S z# T+ r* O5 J cout<<"{}";
: z% b8 C+ t: m' @% T% m% V }
6 K3 a+ E5 R+ l" U$ v* K1 i}
. `" l# ~! u! k8 m; V& t
4 z! s- F1 F: d2 ^- S9 `//容器vector中元素的去重
) N: ~* L0 Z' wvector<int> unique_element_in_vector(vector<int> v){/ u/ y! D* }0 c) o/ H t6 x" Q
vector<int>::iterator vector_iterator;& ?# h: o8 ^9 n# l, ~0 o
sort(v.begin(),v.end());
; r$ u- p* a; Y% O vector_iterator = unique(v.begin(),v.end());
* F0 `1 y& x6 ^) x; u if(vector_iterator != v.end()){
' a8 x% ]* V' x- s v.erase(vector_iterator,v.end());2 l$ l; V0 G! b7 b
}6 e7 g' D/ I) g6 L! S) C; c: X& ]
return v;/ y1 L( E9 K0 x y" f
}" X# K$ R5 c0 }) R7 k# T
" `8 H! h! W8 Q+ x0 j
//两个vector求交集
$ N0 ]/ k$ ]0 m% Z9 C* G9 }vector<int> vectors_intersection(vector<int> v1,vector<int> v2){* o8 u1 |# ]6 F: [6 U* o. h! M
vector<int> v;' N" E( n5 l" W9 L
sort(v1.begin(),v1.end());
; i7 |0 z+ B7 b# j sort(v2.begin(),v2.end()); : v" Z. I1 i* k: p0 i
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 - b/ \1 e; W* T$ }6 M
return v;8 N" }, ]. N( F T
}# D, o: a' @7 w2 t& j
- h% r/ W6 z7 M
//两个vector求并集
: O3 l! P, ]2 q. ^& `, q7 mvector<int> vectors_set_union(vector<int> v1,vector<int> v2){8 d0 U8 e1 T0 B. I6 o) H
vector<int> v;
( o+ O# Y1 T" K/ X% E, Z sort(v1.begin(),v1.end()); / n: w% f8 Y: M. m6 C& F
sort(v2.begin(),v2.end());
) Y3 U: }( @# {8 m1 P& C# k4 w set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
: C6 f1 Z c- @3 Z' [9 s return v;" l( v1 G/ x7 a6 m& p# @( S; I' p! L
}; j) F9 K/ F0 L- {% i7 K4 Q* H
7 X* t$ }9 I$ K6 p$ v S+ g//判断vector的某一元素是否存在
+ Q4 v6 ~, t, sbool is_element_in_vector(vector<int> v,int element){
* o+ @. d4 O. T6 V( H4 O vector<int>::iterator it;
9 l r8 ]1 Y/ N' b" d! Q8 F it=find(v.begin(),v.end(),element);
* D% ~9 w/ I0 C6 k& O( O if (it!=v.end()){
8 N4 \' T- G9 N0 @ return true;9 S( g8 a- l& ?" o
}4 \0 s+ E' b' z% H' L0 U7 A
else{
( x `( x/ ?2 L6 J9 x" Z& Y/ @; c return false;
0 `! ?4 h. W/ j. z8 a }3 A- p2 O4 {( K
}
3 M- E+ c* t" F0 ~ " b! L1 Z8 E& @7 I
int main(){/ U' h7 _3 o' n' r! k: p8 t: W
vector<int> v1,v2,v;
- M' y$ a( X5 @5 y/ e5 r v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
: n/ s& g+ g) h6 t cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
9 Y6 |! R" V6 P" o cout<<"对v1去重:";
c' t, B* c* b L$ t4 D; } v1=unique_element_in_vector(v1);
: U4 F2 K9 l* B$ p- c& B+ i6 Z print_vector(v1);
3 _( M( J' `. F* g$ f cout<<endl;' R/ I- U- A6 A5 y
cout<<"求v1与v2的交集:";2 {: L6 y- I- m
v=vectors_intersection(v1,v2);$ { z0 H& G3 G; B6 z) O' h; y, I ?
print_vector(v);
1 w: ~/ U4 g& `) A6 q F2 g! p cout<<endl;
& I( u4 R1 D3 U% H# |: K( ^, k cout<<"求v1与v2的并集:";
4 t0 F2 R5 i) S' @ v=vectors_set_union(v1,v2);
7 r8 m7 W% @4 w print_vector(v);9 ^: Y8 Z/ s: H, n
return 0;
# I3 A6 O8 f; b0 v: b}[/mw_shl_code]/ b0 l4 \' W6 a# b& h6 y
|
|