|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 [6 \ }. H% H5 {2 I& j: v$ w) v
* [0 q8 k# a7 `: S% c4 @# v; y4 j7 l9 r
; u/ x4 s( T3 P5 q) f
T( `6 m$ g5 b5 k0 fC++ STL 的实现:( m0 L- L5 C1 t5 S8 }6 J; t. c1 X
" z4 m6 o- r) q( K/ {& O9 u7 Z/ t$ g
' V1 P( Y; ~. P m1 b4 M: a
1.vector 底层数据结构为数组 ,支持快速随机访问* u, v, g* t5 S/ a- O% N
% o8 {) [' R. T! y: I3 s7 f# c! q: P6 p1 G, @2 Q
2.list 底层数据结构为双向链表,支持快速增删
L" Q' `7 ^9 E: D8 m' q. M: m
) }: J* `' o: e$ b3 U5 o1 s. X/ N) x& N# d/ N
3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问. Q0 ?, p4 Y& f/ {% ~3 B3 O
( A5 t' W4 Q! P' R
8 z0 M( o$ f6 K0 e: P0 i4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
! C% q: w/ v* k# t, N5 S$ L# R
; O# u, ]# t# \5 Z9 \4 [7 M* k$ H! ~
5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
( w; w+ _* D% o d* K: D# q T- U0 u- P' U z+ m" a' ]5 e5 r4 m
9 U) }2 n7 ^ r6 I0 u$ T
6.45是适配器,而不叫容器,因为是对容器的再封装
$ w( z; z" X* p; \6 b! j+ b I" s8 r- g( L1 _8 q
- r4 X0 w5 g: ^; @- M0 q7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现( `- c5 T }& q" t7 B
. a# ^# i: d2 d& o
* \& J. e: O9 R8.set 底层数据结构为红黑树,有序,不重复/ y6 R7 F& o, ^6 i
`6 [6 R, ` j8 P
R: O6 g Q1 E& m8 ]# B) a) P9.multiset 底层数据结构为红黑树,有序,可重复 0 E9 \3 {; _/ i
) x, g+ _ k4 Y# F+ d
1 P; K! Q* B, |- t10.map 底层数据结构为红黑树,有序,不重复
) F. P j2 j: F2 V8 H1 `6 e) J+ S- p3 h4 d" B! m/ h9 d) f
- E) p5 r: d; C. V3 W! Y1 K3 I8 n11.multimap 底层数据结构为红黑树,有序,可重复& L/ m: L0 E& K: n6 x
$ }# @* S- S2 h+ S. K
( K* ?- ]1 p6 Y$ I$ L
12.hash_set 底层数据结构为hash表,无序,不重复
9 g5 X6 ^- d# k2 h
, M; m$ O4 x& ?/ a4 H+ I7 h
( s( t! Y3 f9 r+ K0 A13.hash_multiset 底层数据结构为hash表,无序,可重复 + f$ J# s3 H8 ?, y
# a" u. C! a/ | @5 w( u" X
/ _8 e" j5 u, v+ C% Z. _14.hash_map 底层数据结构为hash表,无序,不重复
, E3 P9 x h: ~
1 D _* }0 ~0 q7 Q$ \
% M4 Y! E8 K6 x/ B6 E% ^/ R( J15.hash_multimap 底层数据结构为hash表,无序,可重复 7 M# H+ `" I9 R! c+ O
2 H$ h" v( ]7 n; V# | m
|
|