|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
+ u4 n2 y2 l9 Q1 r2 C- B0 i
, j* W- R! l8 t" ?; K3 \8 wC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:) {- _% P4 x8 k+ P/ c2 f
[mw_shl_code=cpp,true]#include "iostream"3 {: ? \% z$ }1 J7 n
#include "vector" . D7 J, N# @7 Z
#include "algorithm" //sort函数、交并补函数7 H* p! u" V J* l' b$ @! [5 h
#include "iterator" //求交并补使用到的迭代器
0 _% y/ Q8 R' c3 ^& l1 susing namespace std;. Z5 m f: z% Y. j" H
* l; K! t- n- U5 { ^& |
//打印容器vector
2 A7 Z/ e' }' @- k( G \6 svoid print_vector(vector<int> v){; j: U. r& |: Y& w% K
if(v.size()>0){' V9 h; n& `/ E: X
cout<<"{"; , D3 x8 P0 k" k5 X C& |; j: E
for(int i=0;i<int(v.size());i++){ / B* L0 A8 v5 I6 J
cout<<v<<",";
3 [/ i* x' M+ x }
2 d% G7 C/ M5 W4 I9 ^' @ cout<<"\b}"; . g8 G* L, M3 Y' }
}! L) B, ]4 @! O* A/ n8 Y
else{
8 B& o7 E4 c. q& ^5 i cout<<"{}";
8 v6 u( o' S% e D }0 w8 U" ~2 h% l; K, W4 G4 y
}
9 O n4 Y9 X: n/ C 9 P5 M% x$ M& P! d5 F/ W& m
//容器vector中元素的去重! b( I' h- D1 ^% n+ R( }) R4 U& V9 ^/ k6 E
vector<int> unique_element_in_vector(vector<int> v){5 Z8 b; _% i% C
vector<int>::iterator vector_iterator;/ i9 e1 J7 T5 l F6 G5 e4 `
sort(v.begin(),v.end());
8 y5 ?3 h3 E* W) c, h6 v vector_iterator = unique(v.begin(),v.end());
$ p1 m# ]) k' y% L8 O) e if(vector_iterator != v.end()){. v5 J# H4 N+ |4 N$ d
v.erase(vector_iterator,v.end());
+ a1 w% f9 P' u: E }6 j# T1 B! b" Q7 e, V) h
return v;
3 X: o U2 s7 |% i}
+ x9 B1 R( Q$ z/ |- b1 r+ ^3 ^2 ~ $ D' m- {8 r) o2 _$ x
//两个vector求交集3 u# ]8 H' q! F4 D- g6 R; y1 a
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
n. Y9 g5 g+ o ]- { vector<int> v;
* R3 ^3 c. c7 P. l4 D8 N" a sort(v1.begin(),v1.end());
: f6 ~: G" P5 D1 b5 S sort(v2.begin(),v2.end());
9 C5 p! e+ G# ^5 o set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
0 ?6 L: q% v/ v* `' p5 s return v;
) p! E7 f9 k- s2 v3 T' A}9 _+ R8 c2 {8 Z: Y
% k7 Y. {, q" z: f6 H' ^- K7 O& B
//两个vector求并集8 |# r4 g! H7 b9 t! [) S$ E" b
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){
: Y; w) e( O6 o( e* d vector<int> v;8 _$ u/ R; Y2 s, U2 Y6 E8 {
sort(v1.begin(),v1.end());
3 B; T. P# `6 l8 m% y5 v/ n& [ sort(v2.begin(),v2.end()); 6 g$ U$ Q" H3 V1 P2 V9 ?; m9 @
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 . D4 b, Y0 z- a
return v;
! Q. t2 w$ t7 d8 a}* r" i/ f& k/ J4 K5 h' G+ Y
" L1 i* L+ z x+ T//判断vector的某一元素是否存在# T+ M# @* r* Q7 H5 y
bool is_element_in_vector(vector<int> v,int element){
" C; x) l x$ O) A vector<int>::iterator it;6 C. T' K; h" R# f5 d9 r
it=find(v.begin(),v.end(),element);" \! c6 I& ~( N1 `4 j4 a
if (it!=v.end()){
5 g9 X' L8 {& H L return true;
. x4 u0 g% p, T2 t }
$ Y$ a) I: x: Q- |/ ? else{" _* T, `( C% e% t: b' o
return false;
3 H0 B. g' s5 J3 ^ }
: v" @. y9 k% K* \}' F- Y; J% p) N0 y. p+ Z" U
! \$ w1 q" m" E' H3 S
int main(){ U* t% t6 n, i0 P& A' s* p1 Y
vector<int> v1,v2,v;
5 L$ w5 K+ b; _8 A, s+ I# o; b v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);8 ~; o8 N5 u9 p
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;; A# `) m$ B1 w. O; k1 q
cout<<"对v1去重:";
2 F3 y" T$ X3 o1 S! ~$ Q/ J7 J/ p! T v1=unique_element_in_vector(v1);
% z6 |. y: e) c: ]9 H8 d& | N print_vector(v1);( F3 y5 @4 o+ k8 t% W3 L; V
cout<<endl;
$ Q7 b) b" j- W5 j* v- [ N6 Q7 ]; w cout<<"求v1与v2的交集:";; x5 x9 m8 f3 R8 H* E
v=vectors_intersection(v1,v2);7 z3 f- r( N E; _
print_vector(v);7 F& H) y8 n) ~1 H% u! S. {
cout<<endl;/ Q1 R) B2 F+ V6 W0 B7 @
cout<<"求v1与v2的并集:";
: o U# a# ^ v2 l% ] v=vectors_set_union(v1,v2);
3 `/ v, p0 e* G8 O& q; d print_vector(v);
3 i, V% z- d N return 0;
5 R9 e# b& M, n1 I6 u! f}[/mw_shl_code]. T7 r$ [) J; E, X: G: c
|
|