|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: X) r5 l0 v( w3 l9 p
5 n- d2 x, C" b- v# mC++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接vector.XX来使用的,如同在《【C++】容器类》中提到过如何删除vector的其中元素一样,需要搭上迭代器iterator对其进行遍历才能完成这个动作。这是不同于java与c#的,习惯就好。具体如下代码所示:1 h ?0 W9 D" M0 {
[mw_shl_code=cpp,true]#include "iostream"
( g1 {7 q: ]& q* @#include "vector"
7 P" _, ~' N" Z#include "algorithm" //sort函数、交并补函数
A1 ]# y+ ]8 I2 d8 x9 h- U, \#include "iterator" //求交并补使用到的迭代器8 I9 p3 n! Z# m
using namespace std;
% V+ C) _* Z c; R0 f1 ~# e) P7 l # {) w: s$ H6 a1 i
//打印容器vector- i% Z6 M$ z3 Y% Q$ L
void print_vector(vector<int> v){
, ]. D* Z. P. _& ^5 ] if(v.size()>0){2 u* @& d7 M( A: u
cout<<"{"; 4 a$ P+ u( a0 l6 L' ^& n; L' y
for(int i=0;i<int(v.size());i++){
; G4 i Q5 l g" V, U, \ cout<<v<<",";
) ~% D7 q7 P q: V$ p }
" z/ F+ ?/ l0 u. b3 G) X# [ cout<<"\b}";
U+ |8 g8 w3 z7 _7 N1 n }% s4 o, v0 X8 o3 |: \( Q
else{
* W6 \- v% m, w, { cout<<"{}";
1 [! [+ \" Z4 r$ _ }
' [+ v7 p, u, g/ U! t}
; h1 `: @ F8 h0 W
0 q2 }+ m8 [" G9 X//容器vector中元素的去重
( V1 h( G8 O0 L4 N4 P& S0 tvector<int> unique_element_in_vector(vector<int> v){
" Z, F9 e0 s+ C4 C vector<int>::iterator vector_iterator;
( }- z j7 q4 m8 l; y! b sort(v.begin(),v.end());
q( k) Z& `3 c vector_iterator = unique(v.begin(),v.end());
z+ I) N6 i! s% Z& ~ if(vector_iterator != v.end()){
& z0 `7 {5 Z6 i' X" d v.erase(vector_iterator,v.end());' U+ i- c' K2 p6 c" h3 q) V: [
}
4 v# T/ c- ]# h return v;3 ^6 a2 {& U5 o6 e J6 ?
}0 S1 F: l$ N. z9 o8 w2 U4 N: ~1 f! O
- g: M4 `- Q2 X& C//两个vector求交集
& y5 M1 W0 f5 k* f8 E' Evector<int> vectors_intersection(vector<int> v1,vector<int> v2){
) p4 h/ @% q2 W vector<int> v;6 |* R6 E4 ~; q4 t3 c: J! ~0 `) D
sort(v1.begin(),v1.end()); 2 e; N2 X4 v) J
sort(v2.begin(),v2.end());
5 h' q6 |& W p set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 $ F: M" y+ U4 {
return v; B& z; e2 o: s/ f# f; `2 Z
}: @. j- S( N% `' P5 V! Y; @+ s
" i* ~- s; `- s5 F; _//两个vector求并集
( M/ ]% O6 }3 ]) v2 r- ivector<int> vectors_set_union(vector<int> v1,vector<int> v2){3 {# I' E: q3 b6 O& L
vector<int> v;
" [' X. o6 }/ Z8 U9 o7 G sort(v1.begin(),v1.end());
3 S. v( ]3 E- a7 A. q% g# M sort(v2.begin(),v2.end()); 1 m: J g$ I+ U8 d+ d+ P
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 6 i: {( n& Q' V. I5 }5 p8 q# F2 `
return v;
! `, o- ?/ [/ A' F& ]8 S, t' \* y}0 X$ A8 T$ |: Y/ m- x
; Z& P/ ]0 w F! y. w4 l//判断vector的某一元素是否存在! }0 \! a1 e3 a8 [- Y0 U; f- y1 {! n+ S
bool is_element_in_vector(vector<int> v,int element){5 J3 t. |" O8 T9 [. l: S# t/ i
vector<int>::iterator it;
7 q: f# ]6 ]2 c/ X it=find(v.begin(),v.end(),element);# z9 x7 o9 d9 `' {
if (it!=v.end()){
0 |2 t- }( `, T' ] return true;
5 e# r2 E8 {6 O& |) v& x9 h }3 k5 H% t7 v/ B' J) M+ \% X2 z6 D# \
else{
: L, m9 e% s/ `, o( \3 D# p+ Q return false;
7 g* l; ]) t9 p! X' D4 l$ _& Z m H }6 I9 B: [7 R+ z5 x) v9 M7 |9 v
}2 f! i$ _9 |) |
: {9 h& D# B+ X! ^" x! qint main(){
$ U- @% p/ @ x, i" d5 t0 [; ~# j vector<int> v1,v2,v;
2 _. T9 l, \. R8 _, j# D! G4 ] v1.push_back(22);v1.push_back(22);v1.push_back(23);v2.push_back(23);v2.push_back(24);' E' d7 r, i5 v; a. a
cout<<"v1是否存在1这个元素?"<<is_element_in_vector(v1,1)<<endl;$ B: i& {3 [, G. c& g9 Z
cout<<"对v1去重:";
W s( X' T L* s, K" w8 j v1=unique_element_in_vector(v1);! `3 K% t+ l1 `4 s- t2 k
print_vector(v1);
+ ?+ z6 E' c! v6 h5 O' H' S cout<<endl;
~3 @* I( f$ W( w! S cout<<"求v1与v2的交集:";6 {3 s4 z5 {% n: ^4 H4 q7 b
v=vectors_intersection(v1,v2);
* P/ y8 }/ N( A6 n6 ~" P print_vector(v);
8 P+ n4 W: e8 S0 A- j, ? cout<<endl;
# A; W: x# p2 U$ K# u cout<<"求v1与v2的并集:";
* i+ a9 |- T9 u v=vectors_set_union(v1,v2);" y! i* |9 c/ K$ e. A3 L: X
print_vector(v);
# Y3 r, W% _! D% g return 0;
; A7 {- W& p6 O$ X6 ^; E0 ]7 W}[/mw_shl_code], s" [+ S0 X: |
|
|