|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
. o" U( X& v; V+ V6 L
1 B! }6 Z3 e# r! i7 ]1 @* }C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:* ]# t4 p, q) c+ ]6 d o( Y4 w w J
[mw_shl_code=cpp,true]#include "iostream"
; m& J0 H. M. d7 P" L#include "vector"
; f/ l: \8 {, c" E, u! j' N#include "algorithm" //sort函数、交并补函数/ P: F% R' B5 Y6 ^+ x' | C
#include "iterator" //求交并补使用到的迭代器
$ L& B) y0 E- }* l$ lusing namespace std;; J1 J8 u7 D: y
4 D+ X5 `& l/ k% ~/ ^9 @6 g//打印容器vector
0 l+ f7 w9 v4 p" x* B+ evoid print_vector(vector<int> v){
4 c; ~( d( T. `9 I L if(v.size()>0){
& Q! }! |, A/ l0 o4 T5 ? v cout<<"{"; ( q( E1 X$ j# J, `4 k: g$ D
for(int i=0;i<int(v.size());i++){
- L- k) m/ v2 l! a" D) x6 Q, q cout<<v<<","; ) s0 _! E; a# Q: g
} / `2 \; H8 w- L0 V- k+ `8 a4 E
cout<<"\b}"; % d* S; I5 M. z" o* Y
}+ S' N# }; \8 A) j3 `, P# P
else{
" Q; I& }' K% z) u* U cout<<"{}";
: r0 U s2 h# p$ p. l Q8 h }) t `" f. e$ I: |: v9 J
}
% n5 h- x* d3 H. W* n* E; u # K1 G& U# w6 x/ \
//容器vector中元素的去重9 u+ s5 r* f: L4 n ~! {- U
vector<int> unique_element_in_vector(vector<int> v){
4 H8 k, k6 S8 v! L3 Q; w vector<int>::iterator vector_iterator;
6 n3 D% j- }/ X2 I' W$ Y sort(v.begin(),v.end());
$ m2 b) H9 Y( V/ O vector_iterator = unique(v.begin(),v.end());
' u h- x. @! y8 X! R if(vector_iterator != v.end()){- O# s$ O0 P4 o4 w! K9 V6 @
v.erase(vector_iterator,v.end());
/ }: T1 ~" G4 ]- `% x# [8 x }
: m. `+ N% u) U! ]* R2 ? return v;
1 `, h2 C8 ^& z}- v6 O1 \. X' x/ V* J, g% h k
! Q6 D( K; B9 m; F+ b) }! J
//两个vector求交集
& q# ^& f: Z2 {/ jvector<int> vectors_intersection(vector<int> v1,vector<int> v2){" n$ `9 ?+ V9 @5 v- s6 x; V! i
vector<int> v;
4 ^& l. j, |7 f X! I sort(v1.begin(),v1.end());
( x9 C M# n. k2 K: Z& K# L8 g sort(v2.begin(),v2.end()); g7 `4 r( s8 g" l7 k* }% `0 ]! ~
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
) j+ x- V7 a7 i* Q1 E# C# f& Y return v;: D, J2 c9 q# E( ], m
}
# U/ a2 s( ?. h& k8 i6 F9 `3 t
1 @ C! a6 J) k, k- A//两个vector求并集
7 ^5 G! I. o" T3 p9 m8 tvector<int> vectors_set_union(vector<int> v1,vector<int> v2){
( s. ?5 g8 o9 H- h! p vector<int> v;- |/ Q- [+ M4 v8 {# L, y8 s3 t
sort(v1.begin(),v1.end());
8 T+ q6 a* y ]! _0 W1 m sort(v2.begin(),v2.end()); j' J# t" g6 ^$ S
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 - O. T3 c0 ]( X L& J8 }
return v;
# V8 F& Z" s; P" w& ]}$ ^+ l$ p3 l( P5 |! T# I+ Y
1 D' P, b* q3 j5 w* L//判断vector的某一元素是否存在
7 x/ |& a8 C. t; ~8 zbool is_element_in_vector(vector<int> v,int element){
+ P. f' P1 F1 k+ {( O& q, X6 p vector<int>::iterator it;
8 X' S! c! e& _$ z, X; a it=find(v.begin(),v.end(),element);
1 ^) U$ `, c1 v* `5 D% Z0 u if (it!=v.end()){; M( T! g" Q) H6 @9 R
return true;8 X6 P9 |! @0 M" _& q) ~9 O
}- u+ I, a. d2 M$ {+ |
else{% J" I _8 } i/ p1 c
return false;
9 }. F' O+ N$ H, p0 r }
& r% X; [: V8 |2 f1 G/ k$ V}6 F, O6 v' }1 l+ j5 a1 T
) a7 h$ K# u0 Z2 Oint main(){: a, [0 z5 N! }& {, U% a9 s
vector<int> v1,v2,v;% M& D( w( J7 A" z7 j
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
9 h/ E2 F& @4 \2 A2 G! V4 f cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;
6 X; r" D/ S- y7 S: r1 O cout<<"对v1去重:";! h4 ~4 x% h. E% R
v1=unique_element_in_vector(v1);" y; s+ x: E, ]7 G' a" d2 g
print_vector(v1);
3 i' n1 G( M+ W, I" v: `! r: { cout<<endl;$ L! c7 R5 E5 m# p/ K9 G
cout<<"求v1与v2的交集:";
- T0 } c3 H" \% N, \* T v=vectors_intersection(v1,v2);
2 Y6 I/ Q! z0 N9 y1 X print_vector(v);+ f/ s0 m1 r! ^
cout<<endl;9 d; ]; n0 K. ]2 S) T
cout<<"求v1与v2的并集:";3 y$ H, S) W% q% ?" H, u, l
v=vectors_set_union(v1,v2);
9 J2 M) c& x% U# h print_vector(v);, q, G" J0 y$ N, H8 G
return 0;/ R: U- N0 Y& C; c3 P
}[/mw_shl_code]: {5 f% V. I: F1 v$ X& s2 F
|
|