|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
1 ?; T A/ S3 ~6 Y
/ _" u( v. P) f3 e! u$ Y7 R: T* M2 z. M5 o* f9 c
( U! ?6 T) k. e3 ?' H9 M) i: U8 ~) Y! |. ^
C++ STL 的实现:
' ?" Q+ P/ } C# s4 v4 D
: v2 ]& q" I C+ U9 u
1 P. O: M K* |1 w! n1.vector 底层数据结构为数组 ,支持快速随机访问; l% e8 I; q9 t, |3 |3 V ~* L S) {
/ Z( B- q7 d0 N; ]5 V0 I$ S2 G/ P
) P( p5 A, U1 x, p) B" I) Y" R2.list 底层数据结构为双向链表,支持快速增删
1 z( D# I' r9 T: M
8 [. g" H" N7 e$ O0 X9 e0 C' k+ j" Y: j+ {9 z$ }# S b3 g& T
3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问. z6 o4 V S v5 H" S
( z: }/ u" f/ q( s" r( m$ m0 N; L2 K/ y6 S) b4 s
4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
9 b0 [; y i' y6 W- W+ f2 B8 D1 Y
6 ?1 M! `9 _: B. C/ Z5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
( k' ]. a! J( k% q1 L% u2 I# c% X K+ A5 N, J) J0 c* ~
7 }- h2 L# G2 e# y8 l8 L6.45是适配器,而不叫容器,因为是对容器的再封装+ i% @. U! w. d. X- ]$ v
+ u! S) Z- s8 E) b# N
, p$ U! X' s* f
7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现& O) j5 A* P- u- Y& y0 @2 x
/ B7 d" }# t7 k f; ~% ]6 L
; U- D3 k& ^9 |/ \$ P% C3 j5 }3 _* k8.set 底层数据结构为红黑树,有序,不重复9 l2 b! Q- q- K6 Y( t$ G' a
7 n) U$ v! Y, N: K' A* O) V; t0 `+ c y. s0 R# O) m
9.multiset 底层数据结构为红黑树,有序,可重复 # Y4 n I5 B8 Y# x' b0 I; d9 \
1 O* l. m- R) @; g. K9 _# @
( n8 N) x) E9 V3 L10.map 底层数据结构为红黑树,有序,不重复8 ^" ^6 T, t+ f! j
/ \! I' u# T; L& f
2 Z# h% r' x9 F$ g1 [$ F6 e" p11.multimap 底层数据结构为红黑树,有序,可重复
# j# F! C/ C# D, u4 H& K7 r9 ~( n4 D1 a, t0 x% {2 o% B" l" x9 o1 x
, Y/ v. Z6 t( \5 ]! J
12.hash_set 底层数据结构为hash表,无序,不重复
# Q; j" u: l- H! B' F% U }. v7 k+ J O8 c/ u8 O9 a
! b* _; G$ x' ] G/ }
13.hash_multiset 底层数据结构为hash表,无序,可重复
! z+ i( C6 O, y9 E1 r6 `" V1 v; I/ H, n$ Z& _& e* c
5 x5 o+ ]3 y/ {- Y0 t14.hash_map 底层数据结构为hash表,无序,不重复0 C% h* S, {: u% g
+ j! L3 _; E$ g7 z& Z$ ]* B0 ?* Z' N
15.hash_multimap 底层数据结构为hash表,无序,可重复 8 e7 s8 F( ~: Y
0 y! D: X0 @, R3 K% G9 w% ?2 v |
|