|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
8 e/ P1 j6 q- |, G$ z* X5 s' `) h9 v: s' n: T& z, q
C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
# d7 P$ a7 Y* S h% S( l' _8 M[mw_shl_code=cpp,true]#include "iostream"1 y; T% y9 e! Z2 q# K$ M
#include "vector"
( I4 J8 u+ {9 P! m#include "algorithm" //sort函数、交并补函数
6 z( W- F6 t# t+ w: E5 p. J2 Y#include "iterator" //求交并补使用到的迭代器
' ~2 ~1 _! ~6 A. W9 wusing namespace std;
6 ^/ H: D$ a# T
$ M! _& G4 a; {8 m! T0 o//打印容器vector$ ~. l7 Z9 i7 B+ [/ \
void print_vector(vector<int> v){" }; D s8 i* O& y$ M! Q
if(v.size()>0){) G. X4 o0 [) s9 K4 X
cout<<"{"; 5 F! Z/ B! u" R9 B, y4 Y
for(int i=0;i<int(v.size());i++){ : u/ O) \! B1 g. E# A
cout<<v<<","; * A& ^. `" D; W1 i
}
; \% V8 c+ O _9 {) I0 Z cout<<"\b}"; ) y$ Y# m: O- E+ S/ E( Q
}; Q4 W0 q2 }0 ^5 Q3 c H9 G! Q1 J2 }
else{5 O3 m' D; v% v6 {6 j# I4 a% j4 y
cout<<"{}";
- S/ Y! i5 M9 w7 Z1 n/ f }
" w! Y. V- j+ S8 w: @1 `4 } I}
9 \, ~. y l1 m0 I5 y7 A6 \ # A4 T: l* ~6 h$ @- l- e3 U8 i
//容器vector中元素的去重, q6 A/ H4 z [$ {, g
vector<int> unique_element_in_vector(vector<int> v){+ T! a( y5 z' y+ c8 G
vector<int>::iterator vector_iterator;
9 T* \0 E3 l3 o5 T. n# n/ O sort(v.begin(),v.end());; j3 V% ]7 U0 N' K7 i
vector_iterator = unique(v.begin(),v.end());
& N8 a2 c: e0 ^4 X# Q. n8 [6 h2 F- U! g/ n if(vector_iterator != v.end()){4 ^! c- ^# i9 D/ C
v.erase(vector_iterator,v.end());
+ C2 C6 G, _# q; i% d }
+ X3 T* Q5 l" p return v;3 \; S9 @3 C1 x5 p; H
}" Z0 m, d$ @* I& e3 d' R
3 }6 ^+ q- A5 L//两个vector求交集( ]: T4 ~' N+ _& v3 \. f }
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
; u' y- q1 U6 s2 u/ o D! p$ L) c5 i vector<int> v;
- J9 O9 [; T2 e% q( L0 c ] sort(v1.begin(),v1.end()); 7 E/ x4 Z* r; s7 P p0 S
sort(v2.begin(),v2.end());
) g" N7 d% ]: J+ G- S set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
+ o6 K9 b y1 ]! {" {# M" T return v;
" e8 e1 \' o" e1 l" U}" {3 K- ~8 y* M4 k3 U
4 ?1 y; b) X4 }: T# k
//两个vector求并集7 `- Z1 S% z" |
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
: `4 y2 I1 Q! j, I, v# [ vector<int> v;
+ A" D; n& Z Y8 _ sort(v1.begin(),v1.end());
, f+ D& q0 Q9 k: o1 Y sort(v2.begin(),v2.end());
- |% r* _( ` t0 z( F4 y set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) N4 N b) ]- V return v;, J" _+ P5 \9 [
}9 M( H$ V* ^! a v" d3 L
3 s, Y+ c: }' `2 y0 c//判断vector的某一元素是否存在
/ P& c3 L9 K1 tbool is_element_in_vector(vector<int> v,int element){
3 h/ J8 _6 \6 P% R vector<int>::iterator it;
" K- m ^' H& m' v8 x% q8 f e it=find(v.begin(),v.end(),element);
3 @4 s; S( [5 U0 d" B5 z if (it!=v.end()){0 R7 b" v, {4 I$ a* q; Q0 N
return true;
E8 c# k# t/ p3 g7 F }
9 P9 d; n) d+ M else{
a6 A; r8 n3 N- ]/ c: L, s' d return false;& }1 {% l3 F, u( B/ X1 u- T7 m
}
! K H2 R# X* b}% f# {0 Y4 t' r8 @6 t9 q8 M) f. P
+ h) S6 @/ Z& ` S2 v# T. N
int main(){; U8 x# a2 J! e; J* m( ~% Z
vector<int> v1,v2,v;
. A. [0 w* g: s+ W v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);+ G1 U/ ?; W4 P4 R! K+ V* @
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;2 k* r: s* {- f% r( W
cout<<"对v1去重:";
, f. d( a: X* q% @" s6 e, i v1=unique_element_in_vector(v1); n2 a) y r7 }4 A& C! Q* h
print_vector(v1);
+ A* n2 @: e7 u7 e3 c, w) H8 D) Q cout<<endl;
) i. V/ {6 B: g8 H% i cout<<"求v1与v2的交集:";
8 G9 e- N! D5 d' ?1 C( b4 C v=vectors_intersection(v1,v2);; T5 x9 X" y7 _$ ]/ z. q) s
print_vector(v);
8 i7 F" ^, Q6 D$ e# W, f cout<<endl;
. b# _* m1 O% q$ i( e2 g* n/ C cout<<"求v1与v2的并集:"; s. f5 p) S' D4 Q* h |7 ~9 ?
v=vectors_set_union(v1,v2);- m( K' ~* V2 ?$ \/ ?
print_vector(v);% a& \& y1 O. `
return 0; _6 C7 B6 w1 U: V& J' D
}[/mw_shl_code]
5 ?' b W a' @& w! D/ M1 y |
|