|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
! e! g/ }3 |" k3 M! b8 ?
% N! p- Y$ @8 X3 T6 T# {( V2 t* A+ u' D: T$ u5 c
6 c5 G1 n& @. k5 G
' m: T6 F+ m; O% V, M, ]C++ STL 的实现:' W7 o+ t6 N2 ^/ g6 p) m
9 |% J/ C6 A: M' S! D
0 o. r" l3 M5 \8 G
1.vector 底层数据结构为数组 ,支持快速随机访问
8 q ~2 u; T; z9 m0 }, @0 S" U9 {
$ a. T8 a8 Y! S: N; d Y2.list 底层数据结构为双向链表,支持快速增删( h! R4 B7 B" u# N- d: l5 i
3 B7 u9 ~, I4 q6 Q8 M: X4 ~2 Z: {# G$ W/ [' f
3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问: a1 x! ^" \( A" z! `$ E" J
4 e5 P; T8 i6 K; _+ f9 f3 t
g( r5 X& p# }" F
4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
, ]( S/ o1 z5 @( y1 f6 Q5 Q$ L6 G; C5 y9 {; }( x& v2 {3 w
$ M* o8 h( Q; F) N% \$ o% _" ~4 H9 D
5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时$ p" a8 W! a/ X" O
. y2 S' N# Y Q( ]6 f9 i
& E3 H& {0 ^3 J4 n/ k
6.45是适配器,而不叫容器,因为是对容器的再封装
/ l7 K1 }/ h: e2 i
P8 F3 C. g; C: b2 ]
* m: v' N8 e0 K7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
5 K8 c6 `" R) Z, X/ b0 k2 `/ T4 S* A& L4 L: b
% ]) ^2 t) i7 x$ e* @
8.set 底层数据结构为红黑树,有序,不重复$ a7 {& {3 q3 o! |6 @& R5 w' i
. n2 e+ m' w, M. F: y1 v2 X
& b4 m/ h4 A I5 O+ b
9.multiset 底层数据结构为红黑树,有序,可重复 , J* x. ] Q9 N, X, }) l: z
. t+ a$ x1 Z3 @+ k, a% k' e1 c; \8 N, D% y* l3 r
10.map 底层数据结构为红黑树,有序,不重复
9 [3 Q4 c. f. f
! z3 p' R# M8 s) c7 C
5 y; S3 S$ y: p4 w$ M11.multimap 底层数据结构为红黑树,有序,可重复
0 ]" ?0 A: o4 a
7 V" n8 e/ J+ c& \. U9 a4 [! ` r [3 Z: z+ E: w
12.hash_set 底层数据结构为hash表,无序,不重复& P7 i) Y* l/ B9 C, e! f$ z7 {
. }8 L$ L J9 B( Y% V
# A8 @! c- a E* |' f- I13.hash_multiset 底层数据结构为hash表,无序,可重复
; h7 [! s; q# }
, l1 _/ {: ^' k8 c% ^
# N- \" B" H( ] i14.hash_map 底层数据结构为hash表,无序,不重复, f- d( t9 @# N
+ r6 V$ d6 w h% q& k: @; E1 w+ W3 r0 j. X- `6 b/ c
15.hash_multimap 底层数据结构为hash表,无序,可重复
: N4 h) m0 ?7 P3 S5 B! {9 ~$ S) G% h/ ~; i4 J. M4 H
|
|