|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
+ n6 e @* ~8 K4 @9 T+ |( p8 D
/ @* S0 H( B' Q6 `+ T) [, B0 T
d. m4 G2 }' W5 T! U+ s+ L
+ @8 s. Z. y% u' O/ A$ q4 N3 D
( |, e$ k" h8 f9 J, @/ JC++ STL 的实现:
2 J$ m& l( n( \) X
) Q# o% Y! m$ g2 ?* k3 r
9 b, y) A& G* [6 t5 d1.vector 底层数据结构为数组 ,支持快速随机访问
# c$ w, v$ N9 U' _" e
1 E+ v, y0 \' A
2 t, e/ J9 e% u8 y5 A+ |% _ Q" X2.list 底层数据结构为双向链表,支持快速增删/ d5 y3 Y4 L& W6 P8 o8 Y$ E
a# r. ~3 }7 ?
4 s( d) X# F* O1 Y, B0 s3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问
3 D$ @8 [8 f A6 S$ n
( N& }: ^3 i& M9 `' I0 p
" G# M3 f* K# _; U; |4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
4 L W, t0 N' |( [3 x+ G0 { l2 H1 A1 q) ]
! v7 S/ X! |" n. K9 E t+ z5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
' i' d& ?7 M6 O% d) u2 k1 p' H8 a: l6 a6 z5 k& u r
. w/ [* I. @1 \5 e- ]4 b, w+ e6.45是适配器,而不叫容器,因为是对容器的再封装
3 y+ I' k+ i) B0 X1 n& ~! v a) ]$ @
- b, B- |7 T$ \# c! _8 w7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
9 p/ @, o" ~! f! @, f' r7 |" p4 L2 e/ v" R- i
5 e, d: S+ T w* h3 N* L8.set 底层数据结构为红黑树,有序,不重复
3 k- A7 _' O& X0 s% ~' K
! X \ P8 |0 }" U, D; v1 x, a5 g4 u, ?! Y5 O5 T5 \! V4 ]
9.multiset 底层数据结构为红黑树,有序,可重复
5 l; w* a& y5 n7 f7 w
) x; h0 k+ z" ?; h! v3 P
$ } d; b+ F! x" |" b10.map 底层数据结构为红黑树,有序,不重复' e" t# w9 R" [! E N
7 M: m+ w7 m3 U$ U+ j2 P _
# a7 {) T3 h6 k
11.multimap 底层数据结构为红黑树,有序,可重复# T, |" {( p4 `4 w! x) Q7 ]& D* k
. E Y9 l6 }5 @6 ~6 g, R
) @( P# Z% c0 S% I12.hash_set 底层数据结构为hash表,无序,不重复
3 ]: O- O- ~ N7 q: Y! E) M9 k" x! ~0 b+ ^
6 i( G& [! n9 s# A, a
13.hash_multiset 底层数据结构为hash表,无序,可重复 / @9 t. C% O& _2 z8 Z) s4 t" T+ m$ Y1 k
1 c* {# o8 l1 K: c
- \ l* B2 N0 L! f% I' n14.hash_map 底层数据结构为hash表,无序,不重复' Q8 \) ^/ l' |/ e: a2 K
" Q0 ?% J7 @. R3 }7 D: @6 [
* R# m( a& e5 M1 O) |
15.hash_multimap 底层数据结构为hash表,无序,可重复
. m+ b- i5 X6 W9 I9 k
$ V/ [5 J5 k8 }% \$ y |
|