|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
/ q# E$ K8 d9 c: x( l" q9 Y* k$ S6 ?- Y; Z$ z: U* d
" B) r3 \6 Y+ |- k8 ]: P: ^5 {* |, B# s4 R
$ B/ G! z6 c$ f3 t. {, F
C++ STL 的实现:
# R3 Q, t. f$ |9 Q
, q7 y0 l' Q; M4 C/ X+ K/ D
5 g; f. W2 J7 c. F; B: |$ S1.vector 底层数据结构为数组 ,支持快速随机访问9 D/ B& O4 l7 ^0 w% C
6 E3 H3 r8 d6 J: k5 t# x' K" g% ^7 k* s6 e
2.list 底层数据结构为双向链表,支持快速增删$ m! H+ N" v+ z8 {. }
1 a2 Z; S7 h3 _# I! ?' [6 \
$ N5 |, I& h1 E4 b- j3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问$ m) }( J" X' A
0 l) e& M; V" j: m' G6 S1 g
' i) e+ K# l, x& T6 d
4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
8 {; E2 F; L! X* y/ [/ _
' s6 h. b9 }+ i: _6 S1 U# u% M! K
5 W- `: u6 Q& H/ @) O5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时; I, ^$ c3 b, d* W0 k
1 @9 V& S$ D$ T3 l4 o6 @( r: k5 ^. M# n% h8 G H& _
6.45是适配器,而不叫容器,因为是对容器的再封装4 _6 n0 T' A- Z- o; v. D1 v1 c3 O
+ i7 j& Q# h w. x# E8 c9 H
6 E% v: i/ h% J- p% i7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现4 m/ i+ `+ H0 X: d4 V4 S' s. Y, G2 p; m
% ~7 E% L0 w/ Y
3 H1 ?; K6 I; P1 u" a. B8.set 底层数据结构为红黑树,有序,不重复
8 H* y- h2 f! I6 `" L! r! o) C% X/ m; t8 }7 [& V) }- y4 ~
: B6 }& j9 n* O6 r' }6 P( g2 h3 Q1 q3 D9.multiset 底层数据结构为红黑树,有序,可重复 5 B1 ^4 |% i. j+ v- |/ v; o
- T$ C3 O( J$ E
$ _+ q! H, _/ d: M4 r! R10.map 底层数据结构为红黑树,有序,不重复
7 Y+ K# ~% g) t2 g+ K: I
7 T+ W7 c: S. |/ n4 L; _6 v: l( P1 T4 o: m( [
11.multimap 底层数据结构为红黑树,有序,可重复
8 t/ w8 U$ _8 j" V6 c T
) s- O- h! Q( Y- Q/ _+ [+ a
6 d3 A5 k7 r* C9 H4 c/ K. Z- [12.hash_set 底层数据结构为hash表,无序,不重复
8 q7 U! ?: H. v4 Y8 c/ T
9 d* k( M9 l+ P( h4 M* f+ @. y, l0 C! e8 B2 ]. X8 g) P
13.hash_multiset 底层数据结构为hash表,无序,可重复
. [1 w4 @1 u; M
4 m! G q& T' X4 u: w3 f+ E9 j M
0 n- y @$ I4 a$ f1 V14.hash_map 底层数据结构为hash表,无序,不重复
, o& x" V4 K a" t, V1 j0 {) i+ _: N9 Q9 i( g" T: |* v
7 |" G' W" C% w$ g3 n2 O. |, G15.hash_multimap 底层数据结构为hash表,无序,可重复
6 f& F4 A& w3 g2 ~
) g; h3 y! N- C |
|