|
一、deque工作原理: deque容器内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据;中控器维护的每个缓冲区的地址,使得使用deque时像一片连续的内存空间,如下图所示:
二、deque构造函数: 1、功能描述: deque容器构造 2、函数原型:
代码应用: #include <iostream>#include <deque>& ^5 b& W( c' r/ | using namespace std; void print(const deque<int>&d) {- Y D2 ^+ o& q4 ] for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)& C$ V% f3 T6 _+ x5 T { cout<<*it<<" ";! A2 }2 ^1 K) Z J4 f. G } cout<<endl; } void test() { deque<int>d1; for(int i =0; i<10;i++)$ w) t" v9 _( [ L$ H { d1.push_back(i);5 |% Y1 W: }5 n$ H# }. o } print(d1);7 d( H f* j) G* v I deque<int>d2(d1.begin(),d1.end()); print(d2); deque<int>d3(10,100);. v l0 k, c* y$ I2 R print(d3); deque<int>d4(d3); print(d4);9 X7 ?/ O) y; p$ F+ X& C& Y, \9 R ' H( C& p6 a. L8 V } int main()3 E2 h0 Z8 w: U5 w8 X3 q {4 x2 {+ X- k# z- R) d2 O! n& a test(); } 结果输出: root@txp-virtual-machine:/home/txp/test2# ./a.out0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 100 100 100 100 100 100 100 100 100 100 4 Y* l) w' I6 B 100 100 100 100 100 100 100 100 100 100 " o" k) ]5 h( q a, H# f4 o( |. O 3 U! m8 T' x& K, ~& _% L 三、deque赋值操作: 1、功能描述: 给deque容器进行赋值 2、函数原型:
代码应用: #include <iostream>#include <deque>; S9 e* M$ u6 t: M using namespace std;4 y/ a; ~, ?3 K) n void print(const deque<int>&d)& c, k! k7 c% c9 @1 n! j6 A: B {$ B6 N3 Z8 x; z, v% S9 y: @ _: r for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)% n4 a8 R/ ]& t6 [& a) j {) M' M8 Z* }8 F) S cout<<*it<<" "; } cout<<endl; } void test() { deque<int>d1; for(int i =0; i<10;i++)1 ~& c" D8 ~! J9 Y! v/ T { d1.push_back(i); } print(d1); deque<int>d2;1 y/ a( t/ F1 j! K d2=d1;- e7 f5 l3 k! |- |, h print(d2); W% `+ M6 ], W deque<int>d3; d3.assign(d1.begin(),d1.end());+ V$ w/ |1 t7 K2 s" y, j/ W9 K( E print(d3); ! ?/ P9 K' |8 E& X8 y9 {# G deque<int>d4; d4.assign(10,100); print(d4);/ T7 R& z! h8 Y3 V$ b6 w+ F5 |. ? }9 k5 G' V! k' A int main() { test(); } e6 x0 A; @" z : I3 k, Y- ~ z4 B. ? 结果输出: root@txp-virtual-machine:/home/txp/test2# ./a.out) [3 x% T* B5 w! j2 u7 B) j0 1 2 3 4 5 6 7 8 9 $ ^- e! }/ o8 i 0 1 2 3 4 5 6 7 8 9 ' i: Q: B' R/ {1 |1 B 0 1 2 3 4 5 6 7 8 9 100 100 100 100 100 100 100 100 100 100 5 f; f: T* v+ S9 I 四、deque大小操作: 1、功能描述: 对deque容器的大小进行操作 2、函数原型:
代码应用: #include <iostream>- a6 K1 R6 t& R* B" U( j4 K#include <deque>0 f+ |' c& x7 I7 h using namespace std;# x# {) d! ^- S* P# `; Y f void print(const deque<int>&d)8 D* B3 X$ C; H7 N+ x$ Q { for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)5 T6 i+ m# B% ]* j {4 P/ H( N. Y7 Q9 e3 ^ cout<<*it<<" ";0 f8 ?* e4 O4 _# ` }9 [4 n5 D- Z0 A4 W% C+ P( F cout<<endl;2 l% a& t" a U9 a" A& K% ^ } void test() { deque<int>d1;" _3 o/ n" n4 i8 X for(int i =0; i<10;i++) {% I7 B* H* m. X( `4 B& ~+ i1 @ d1.push_back(i); } print(d1); if(d1.empty())3 ~) [7 O0 v2 g9 N! w5 @ { cout<<"d1 is empty"<<endl;8 p; @7 {5 O7 v" n; c+ h }; ]# H/ L" b% z( l else6 q& b5 s+ C2 Z+ r* n, p+ t { cout<<"d1 is not empty"<<endl;8 H1 g2 m& g3 Y. J cout<<"d1 is : "<<d1.size()<<endl;. P8 }1 E% h2 Q% l) E8 l }$ H3 P6 v+ [' m1 d" \ d1.resize(15,1); print(d1);6 m% N9 h, w/ p; A& f& B: C7 c: F! j # ^5 C! F# L. e& } d1.resize(5);7 T; |- S; M0 D: J8 [ print(d1);1 P; {, r, |3 W/ G } int main() {' m; D H& y' C0 x1 Y4 x- c% F test();$ a S5 |# K% t; ?# e6 | }& J3 R2 d! q- c W z % i* d. f5 d* v 1 ^* S5 e$ }/ X 结果输出: root@txp-virtual-machine:/home/txp/test2# ./a.out0 1 2 3 4 5 6 7 8 9 5 a" C( r9 {3 a; p. [4 T# Q d1 is not empty$ _! X. U: D; N) J: J4 p/ L3 f' H d1 is : 10% g6 `$ M4 F" Y, v$ v( N1 a8 `4 e6 x 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 " o8 V2 \) f; g' T7 e( J1 v* A 0 1 2 3 4 注:deque没有容量的概念! 五、deque插入和删除: 1、功能描述:向deque容器中插入和删除数据 2、函数原型: (1)两端插入操作:push_back(elem);//在容器尾部添加一个数据
(2)指定位置操作:
两端代码应用: #include <iostream>#include <deque> using namespace std; void print(const deque<int>&d) {$ f5 G/ T$ M, v9 g for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)' S! R9 D' `7 l6 \5 a' x9 N- Z {' o, |) x! ]3 o cout<<*it<<" ";& Z- N6 v. K, d/ N: C" B1 L" e) b K }2 Z1 O5 m/ L$ b8 Z6 V# Y cout<<endl;/ S9 i) Y* |* D0 {) O# g } void test(); A h# J* I. `; h: y# R( { v/ ~( k {4 L4 {6 k" j* _4 s deque<int>d1;# ?! g+ _' z) ?+ U3 E /* for(int i =0; i<10;i++)* d! L5 Y. U9 V6 D* J5 | { d1.push_back(i);5 ~/ P" A$ I' Z8 l! \# y- R } print(d1);*/ d1.push_back(10);/ h O# q* J8 t8 {: @: [ d1.push_back(20);% m5 j1 v" n1 [% c {& f% t 5 e% U# w$ I/ R7 D6 J9 F) v6 O d1.push_front(100); d1.push_front(200);" n. I' P+ o5 O, ^, y9 G! ]. [ print(d1);& w, L5 e7 \; s/ a9 i/ ? d1.pop_back(); print(d1);, Y" K$ U; i* A: v! P d1.pop_front();. y7 b6 p/ `1 {8 ^! [ print(d1); }2 u, J2 @$ V! \/ R* l int main()# F: I+ K( _. d Y a { test();. I7 f7 Z# w8 E( [ }# K* T! q5 Y- i, U. \. I0 x 0 `* C, A& W1 u; Q' g) |1 V7 n; E 结果输出: root@txp-virtual-machine:/home/txp/test2# ./a.out200 100 10 20 200 100 10 100 10 7 L( j2 A5 q H- {! \& c 代码应用: #include <iostream>0 W5 U! D" m# ~#include <deque> using namespace std;( ~+ y1 Z+ a( \( m* C' { void print(const deque<int>&d) {7 p# J9 T5 x! v+ {2 Z2 S9 ] for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {7 F* q) X, p8 J8 ] cout<<*it<<" "; } cout<<endl;+ D' j, M: f; N* B } void test() { deque<int>d1;) ?5 y5 ]+ b _0 D7 P% E4 B: F /* for(int i =0; i<10;i++)& K2 r; c( B) k% D# [" G, g { d1.push_back(i);* m) D5 }5 N& d. C. ?2 R7 L3 b, u }6 |. h6 a9 n0 A1 F, Y6 U/ } E print(d1);*/( t9 d: B" n {) e d1.push_back(10); d1.push_back(20);5 U/ @/ Q' ~. \ d1.push_front(100);/ I/ k4 C* R0 e. }0 f# \9 n d1.push_front(200);9 k7 g$ K' V) b$ ~' D0 c6 n' d print(d1);: ~2 U, P U2 k1 P W: _ d1.insert(d1.begin(),1000); print(d1);6 R$ p; P+ H- A2 |+ S9 }, x . l7 V/ B( B; o) Z4 A d1.insert(d1.begin(),2,10000); print(d1);; S* P5 s8 E/ X* ]7 Q deque<int>d2;# b& C; l7 j1 _0 A$ m! M d2.push_back(1);8 I0 U7 k4 b9 m5 {$ B9 s* ?% O5 k( e d2.push_back(2);' Z. S, L) d: p6 e5 V) p; n% ? d2.push_back(3);9 x6 _5 e+ c- d% m+ c" y " ?' W2 s/ M+ x4 t d1.insert(d1.begin(),d2.begin(),d2.end());; c% R) Q( F) u# `9 |' H; ^3 Y print(d1); }' h) B* j9 _0 E" a0 ?1 n int main() { test(); }# X( e8 J- y, S 结果输出: root@txp-virtual-machine:/home/txp/test2# ./a.out0 Z2 m, A# h# p+ A200 100 10 20 ! l2 n3 \- t* H# Y. N6 J) O5 _ 1000 200 100 10 20 o5 h: x* r+ N6 b/ g 10000 10000 1000 200 100 10 20 1 2 3 10000 10000 1000 200 100 10 20 m6 q; Q9 S& l" g 代码应用: #include <iostream>#include <deque>. r1 M: z5 w; Y# y: O% F/ l using namespace std;8 Z L/ W$ ^( z- X/ \0 ]$ ` void print(const deque<int>&d) { for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)/ E6 H- o; [& N( G V {& m+ ^" o+ q; R5 _, k1 }% h; N cout<<*it<<" "; } cout<<endl;+ c( R: h7 ?5 N) a ^) n } O9 H: m( A ~; l0 ~( R0 q# v5 H void test() {1 s$ ?2 Y1 a/ k1 R% Y+ S4 X deque<int>d1; /* for(int i =0; i<10;i++)9 U! S; B& S3 ^- L- f { ]' e9 m. }7 ~9 q d1.push_back(i);. y1 p: [0 k5 w. y1 n6 K' q }6 a2 {# U2 @ ~ print(d1);*/ d1.push_back(10);' ^, F+ |. b, G, d7 ~2 P" V! B d1.push_back(20);( n9 T- m2 J/ V" v d1.push_front(100);: q: t( t2 ]" \$ I; D% N d1.push_front(200); print(d1); ! l9 s$ B6 y: \: P* C& G- A deque<int>::iterator it = d1.begin();//d1.erase(d1.begin()) it++;* e/ K' @8 E: u* U6 h7 c, p6 S d1.erase(it);6 M6 d% q# T$ u9 p- j print(d1); ! N2 v0 P8 G, R+ p d1.erase(d1.begin(),d1.end()); print(d1); d1.clear();8 U, H5 l+ _0 k print(d1);! X( Z! i$ f3 [- y }8 O1 Q) f2 S0 t& p( c int main() {( _ j5 t, M- L6 Y0 u% G test();& K: t0 s! K9 D } 结果输出: root@txp-virtual-machine:/home/txp/test2# ./a.out2 y! B. T; w" b/ ~* A) b200 100 10 20 ) P0 w9 l, V* B9 l 200 10 20 3 ~. e& K0 @0 }" t/ A . o" E3 d/ [$ Q( S6 b2 C& e ] 4 |6 E% _8 ]! V/ `! f 六、deque数据存取: 1、功能描述: 对deque容器中的数据存取操作 2、函数原型:
代码应用: #include <iostream>#include <deque> using namespace std; void print(const deque<int>&d). T! @- ]' j8 ~/ e {1 w1 o0 Q) x4 Y' y3 I for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)* {" {4 ?- t. l6 `; u/ Q { cout<<*it<<" "; } cout<<endl; }2 N0 Q5 [6 [% V void test()- T* }( j1 i3 r! I { deque<int>d1;- b$ F4 a( H; d8 a6 }; A" s2 O: L d1.push_back(10);+ j3 n" S! j* q) h* H6 E4 n$ w7 Q d1.push_back(20);9 Z, `7 w) K) o! r6 I: k d1.push_front(100); d1.push_front(200); for(int i =0; i<d1.size();i++) { cout<<d1<<" ";# H& `$ }2 n4 z& N; r. f' S }$ K2 _3 U% d! `/ u cout<<endl; for(int i=0;i<d1.size();i++) { cout<<d1.at(i)<<" ";5 F; l1 g; v9 \+ ^- I V7 Y/ | N }) U- G3 B- P1 k+ [6 g4 V0 t cout<<endl; cout<<"the first is : "<<d1.front()<<endl; cout<<"the last is : "<<d1.back()<<endl;, w" x5 X8 J$ b/ L } 4 w0 U; {' W/ }4 ^ int main() { test();2 A) v2 M, f0 g7 v2 z } ) r b& y0 t0 t l6 u2 D 结果输出: root@txp-virtual-machine:/home/txp/test2# ./a.out200 100 10 20 3 H. u- c4 H2 h: M7 { 200 100 10 20 % j7 m. M0 q( J the first is : 200 the last is : 20 5 A$ R! t' W3 P 七、deque排序: 1、功能描述: 利用算法实现对deque容器进行排序 2、算法: sort(iterator beg,iterator end);//对beg和end区间元素进行排序 代码应用: #include <iostream>& [5 I* [& k9 H) \1 X#include <deque> #include <algorithm>0 }/ b( i$ r9 j2 T( B using namespace std; void print(const deque<int>&d)1 ^! }" |0 k. z7 V" w { for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)4 U! m" n; d0 g3 ~) \% G3 _' v {; ]! x8 D1 [5 z! Q S2 }, R6 s cout<<*it<<" "; }, T9 [ e. u k cout<<endl;8 ]& A) @; I8 z `/ F y, p } void test() G% A2 u$ g- W" H; C {' p7 g( I0 W' B4 @/ g+ D# E deque<int>d1; ! O; Z: T- D. X d1.push_back(10);$ s; ?$ G) X I* u: h- s; o d1.push_back(20); d1.push_front(100); d1.push_front(200);+ d- w$ l! g9 P( \( s9 {5 b print(d1);9 `9 w1 q( v9 L! t3 p sort(d1.begin(),d1.end()); print(d1);' M T: P1 R% [- A) w* w$ }8 D7 Z } int main() {9 h/ H7 Q y2 }1 ~" \1 s7 Q0 ` test(); } ) O" G+ L* ?! h ' C9 M; Y; Y* _$ ^ y2 q% [7 A 结果输出: root@txp-virtual-machine:/home/txp/test2# ./a.out200 100 10 20 " F( ~4 a- w+ d 10 20 100 200 |
微信公众号
手机版