|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 q' m: M: C& w- f# @% d1 d
$ W5 a. k( _- }* x- G
9 n) J' }/ c: C+ B* x7 j$ c$ S* g
& q# |+ f6 Q# E/ A( U9 R3 x. |0 _2 y7 m. ]4 f N# w. U: [7 V
C++ STL 的实现:
' Z2 W. _0 ?2 r
+ Z H6 G7 x9 p) ~) b, w# k) j. s1 U9 q$ P! V5 c2 _7 `! G. z6 L
1.vector 底层数据结构为数组 ,支持快速随机访问3 P3 w6 n- G$ G7 ?
* ?' l ?1 ]% E4 V* M; K' l8 S3 U
2.list 底层数据结构为双向链表,支持快速增删0 l& R5 k6 \) K) P% t r
0 F4 H0 L: a1 N, S
/ J) }5 e3 k: L( w/ `, y% A# B; ^$ n3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问
0 `: W/ j# n+ J7 i* d' o; f0 h9 v0 \7 {$ R9 j
+ f8 ^+ E0 a9 t* R% N- K
4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
% h$ i- t3 i8 {) e
2 A5 q+ Q+ A9 A, ~# Y, n8 E0 }2 g' F* f/ r1 ]: F# f) a
5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时8 [1 A& `# T& [3 B* }& F* n
I: w" O, V; U7 ?# c
, b2 J, m% Y' B8 F3 q( {4 ]% w: L- _6.45是适配器,而不叫容器,因为是对容器的再封装6 j# a! p9 z! r0 x7 f o1 C; C/ p" }
# p! \4 q! \" p' o% @! p e0 l! G) _
) i& _1 Z9 A7 S3 W5 ~
7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
: C6 ?6 X/ j4 Y
$ m: @- s7 f$ D# u0 H2 b ]# E) D7 ^; d
8.set 底层数据结构为红黑树,有序,不重复
2 g; I2 [0 x% I4 r9 q
0 L4 Y9 f% X& M# W0 V# P" ^2 w6 _$ J
9.multiset 底层数据结构为红黑树,有序,可重复
. e7 n( y* J" ?5 Y7 y. @+ ~+ F' u8 f S4 y$ _( r8 U8 q, P
& v! x2 z1 m1 m- ^1 R4 {1 e10.map 底层数据结构为红黑树,有序,不重复* X8 a6 |( n" {( p5 l" c9 n; e/ Q
+ _. c0 c$ x0 ?$ k* ^$ E- Z
* [" U" U% o2 P* n( { d+ I9 F11.multimap 底层数据结构为红黑树,有序,可重复; S* y; T( o7 |. V7 o3 L- F8 t
! Q) s0 F# w, v' N% `% @
' O# w! {6 B2 i- ^9 W: U
12.hash_set 底层数据结构为hash表,无序,不重复% S. O1 \7 x* e% ^: \
% u- C' u8 v: v0 K
) l# ^2 T! h b {- P13.hash_multiset 底层数据结构为hash表,无序,可重复
/ o! _; g& {0 m3 S; D/ I# Z2 w3 l' H! `, l$ J8 \0 ~
. T" P* e: S. ?) B; @14.hash_map 底层数据结构为hash表,无序,不重复
+ J& J0 W( u6 |9 i/ }; v W/ f% Z5 y- W7 Z- {% A
& k. ?' W) m/ Z, D+ G# x15.hash_multimap 底层数据结构为hash表,无序,可重复 & s+ d7 R5 g, ~ L* u0 x# ~
: v5 x( A/ C$ v9 H4 K# f |
|