|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% C% n! `+ F8 ?# b
; E0 c2 V7 {% XC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:
! H! f: X) N9 C6 i6 H+ D# ^9 L; A[mw_shl_code=cpp,true]#include "iostream"
8 @3 n" n4 p* a2 ^0 V/ ~#include "vector"
4 G3 ` C+ H3 r: \9 m#include "algorithm" //sort函数、交并补函数) }7 b9 t1 `/ K( m* E
#include "iterator" //求交并补使用到的迭代器& Y' K6 l, Y( b; M- I
using namespace std;
9 r2 f& C7 y7 L $ O/ D' i; z+ e. s
//打印容器vector
; ~/ h7 ^& e% }2 S4 ], N' zvoid print_vector(vector<int> v){6 j; ~/ F1 D$ V
if(v.size()>0){
. ^& O* B$ A9 Y# c3 D) F' i" f cout<<"{"; ; C: O0 U6 z0 p; R" f- T" ^
for(int i=0;i<int(v.size());i++){
, x2 O1 M# {5 Z- X1 a3 _ cout<<v<<",";
% Z. q6 M5 x1 _1 P6 h }
0 x7 b% T5 a2 B6 }- d2 K& }* I cout<<"\b}"; $ x9 e# w. Q0 P8 r5 ` c+ P: U
}
; E6 B( q9 v a3 p# c/ U3 P else{& s+ S4 ]: h* E" \ y* r
cout<<"{}";
) a. u+ [9 U8 ]- o: w& I }
4 W& e- j4 E7 f4 V/ `" C}
& k8 V* d, t$ E # a2 u9 W6 W7 G6 W* {/ g
//容器vector中元素的去重
. f- O( q: m% h) d- }vector<int> unique_element_in_vector(vector<int> v){0 _. R6 w4 s. v8 y8 h
vector<int>::iterator vector_iterator;- b- e$ V& p9 K* Z% K
sort(v.begin(),v.end());
/ u8 |& y% Z5 n* B2 W4 [ vector_iterator = unique(v.begin(),v.end());" }/ C5 K9 L) y+ u3 x
if(vector_iterator != v.end()){0 y1 ]8 S8 }7 B1 A2 v/ m
v.erase(vector_iterator,v.end());: L: `" Q) [ R) G% J
}8 m$ r, ~8 h& s& L8 C& g- ~, X
return v;
6 c4 s' t& l& x8 G}6 u' X$ [; _% s. i* D1 F
y- R( [1 q, J//两个vector求交集, u' q. l! I$ | T+ n
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
3 f. u: H4 K N/ B; c vector<int> v;! N% i: j2 Y a2 y p
sort(v1.begin(),v1.end()); ! P( {: e6 I" m( v/ x+ G( h" ~: P
sort(v2.begin(),v2.end()); 8 V7 w8 g7 M+ @9 R8 F5 f9 _
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 8 G+ [; N; j, u% E2 w% n
return v;
$ Y' L0 [% a9 p& C( {}* T- Z. K# h: m5 |. u( t
! d! }4 |* t" T$ `1 }//两个vector求并集; j/ ]) X8 e- e2 `6 |
vector<int> vectors_set_union(vector<int> v1,vector<int> v2){4 x4 M4 M# d3 y$ `2 [5 }' ]
vector<int> v;7 s/ x8 a" e# U0 u3 g4 a
sort(v1.begin(),v1.end());
) |- o5 h. L- T; R: E e% E6 y sort(v2.begin(),v2.end()); 7 H5 Z r: t7 S% K
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
# c/ C' W% J# k7 S return v;$ u! M6 R: j3 |& k5 g: C
}
* _8 E# Y, r$ O" J0 i7 E
. @5 P+ i, g* m% ]9 l//判断vector的某一元素是否存在- n' u" T# s7 z. M5 }
bool is_element_in_vector(vector<int> v,int element){
. n4 P" a" `* p7 g vector<int>::iterator it;
4 v9 z- n+ e# k it=find(v.begin(),v.end(),element);' ]/ _$ j( h4 h7 o) e1 a
if (it!=v.end()){
$ u& `1 R) J3 R# { return true;
- q5 L& B: r( z: y0 C }
! ?7 J7 i9 y* h8 |; m5 y5 M else{
8 _; r( T9 z$ k/ O return false;3 m: U0 i$ j" r3 M3 e1 E$ s; P
}
! @5 h; c0 K" A5 v( w/ ~1 q9 I& v}
^, O; z, H9 m1 O . r: |' h$ _+ ?: q( z
int main(){- y/ ]+ h( h0 U4 }% V! [, d4 ?
vector<int> v1,v2,v;0 C$ a- O6 w; j7 `6 f
v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);
* C4 @1 U6 L; D) v cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;3 Z+ a: { K% l1 B
cout<<"对v1去重:";
: V x) g- [" Y+ ^ v1=unique_element_in_vector(v1);
; |# H Z, H! q" K$ G+ i t print_vector(v1);( g7 h* t+ B0 i8 _4 y6 u
cout<<endl;; n: t( u* F4 Q' K. U
cout<<"求v1与v2的交集:";$ c) r' T: j2 d& p+ }
v=vectors_intersection(v1,v2);( e- o5 x* ?( \) |* F
print_vector(v);
% u( W1 I3 N# l/ k# R* m) S& ^ cout<<endl;9 R' w! g" N$ ~* b8 K4 p& W
cout<<"求v1与v2的并集:";8 l* Z: z( L4 J* G( p6 L, k
v=vectors_set_union(v1,v2);" m( n" U' A9 {! ~' B8 J8 @2 E
print_vector(v);
: P2 B6 |! k$ H return 0;
, r) a; |1 }- r C- {" h}[/mw_shl_code]+ B$ g! E3 V+ ~# [. G6 i5 U
|
|