|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: X( i5 c) h7 k- f. U7 B
: M0 j6 E& a/ z ~) f4 j, i7 s
3 u( ]9 v# o( F; {6 G7 X
7 n0 c, ?2 Y+ \- n: w; r
4 h `& z0 s2 @6 q8 zC++ STL 的实现:
$ j) L0 H. ?4 u8 l0 w* b# G" w L" W! J. d% C0 T C. W
+ r$ S {6 M# ]0 X8 V8 a; J
1.vector 底层数据结构为数组 ,支持快速随机访问, |( x+ a" H6 t1 U. O5 A5 e
( g9 j2 @# b, _
! m" V0 j) L8 K0 _/ ?' y# x& a2.list 底层数据结构为双向链表,支持快速增删 L7 L) ?5 U3 O; }7 Z Z5 k
' `5 ?. Y k6 N, Q! F" o' p( E5 C- y# t- c' K5 \
3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问
! T3 W: K7 @3 x; P
, v6 ?5 S* \: H, V7 R% m) r& O9 K' o( E1 s* W- c( ?! d
4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
0 ~5 V+ b% _2 R" X) H9 H1 O& r; y @$ r$ I* T
7 p; a" l) A8 P' T8 O5 S
5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
' i: J, K/ h: {6 w* R3 f. e Q! ^ S, i( P. I9 x* R
8 F! q3 W+ L" M6.45是适配器,而不叫容器,因为是对容器的再封装
) R4 V! ]$ H' ~9 T, E
2 W! q# ~7 P0 I
, W4 U9 b' S9 v0 b& l7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
" r' n y8 b! D1 f6 y$ z9 y* ^7 c- A ^% \8 V
1 z) \$ x; e4 }1 f; }# A
8.set 底层数据结构为红黑树,有序,不重复- L% V+ @+ x1 l" I3 c
! i, j# S# s: U: i( e3 s3 u8 G
0 l5 k+ P2 H/ I7 E9 W5 N' m% L+ U( E
9.multiset 底层数据结构为红黑树,有序,可重复 1 _$ V6 A. Y$ g+ |! H- b. `
. u1 Q/ T& A8 `2 p1 Q# x) T4 r @% b
2 r% i9 i2 T# U* m9 S7 Y
10.map 底层数据结构为红黑树,有序,不重复, d: y: q( D1 T$ B
4 C& t6 ~1 U5 s x2 F& C. l
+ A# p# E7 X7 @( o; D2 ^
11.multimap 底层数据结构为红黑树,有序,可重复2 h: H( }, g9 e; d+ b# @
; G% z; ?3 |; i( u/ _
- E# `4 y' G3 c6 K9 t( ?/ d12.hash_set 底层数据结构为hash表,无序,不重复
: \- j& v i0 ]" A: ~# o
* h# H% @' t7 L: A# }- F+ H( j$ {2 w8 f
13.hash_multiset 底层数据结构为hash表,无序,可重复
9 p" A' R8 @( ]* ^) \3 k0 g" V F" w! d* }0 }# H4 H
3 B1 A& k% k1 l14.hash_map 底层数据结构为hash表,无序,不重复, L" Q! [7 X P2 P) E" I
" W/ B6 f. {5 x- S) H9 k0 x+ c
3 |' v: k5 O* e% x# b7 Q D15.hash_multimap 底层数据结构为hash表,无序,可重复
8 p! q. v8 H, y, | e+ o5 `% g+ Z! y Y8 z: y( Z
|
|