|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
; v8 v2 g8 z9 y0 y \
0 U$ k$ q% V$ L8 q7 H$ O! m0 `$ D0 `0 @, l( ^& r
0 ^! q. i# N4 W/ P1 {' F# ?5 b! J! R' I
C++ STL 的实现:
4 l* W& V) O G: N6 J6 H6 c- N, T& u4 S9 j$ O3 c
3 ]7 q2 f4 x6 L$ f' e, ^# [
1.vector 底层数据结构为数组 ,支持快速随机访问
5 ~# ]' M; Z) \8 h, } C5 c
8 T5 N2 {& n! m% D% _1 P. r& ^- J( x
2.list 底层数据结构为双向链表,支持快速增删( ~5 l4 Y* Y* _' N; w. a; s; c2 R
* @( l0 \5 e. L- c% _4 |
1 V; G0 Q- {0 t, p! G8 D3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问
& S9 m* O6 [; R6 y9 ?# T! Q$ N/ N
* [ q- x g0 P* T( _ Q5 o" y) e. n2 J- u% p
4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时$ B+ t- G; q5 X6 S( S
( t W* L2 d; {
8 M9 e. J/ d3 l; e: p( ~* ?8 f( T5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
* s( | U. X; ]
9 f3 u3 v" J9 C0 e4 v7 n! o& k( @3 @& d5 u
6.45是适配器,而不叫容器,因为是对容器的再封装. o F6 r0 _% z" J7 [! `% Q
4 y! f$ R8 Z/ y
0 u1 k; [4 o) S2 D6 o( O7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
2 g5 F: m5 x. L% f9 C& S) H7 R6 y' [" o! n# A; g- E
" H8 g" w j6 n' G: I4 x. L2 r8.set 底层数据结构为红黑树,有序,不重复
# ?) R I ]* F0 t! d( S5 P+ |
0 U7 g f& s) s, b3 _% q8 y c7 f; z1 l6 W. B8 ]9 v( L# [
9.multiset 底层数据结构为红黑树,有序,可重复 5 y" w. ^' U" k4 l/ R0 _
7 ^# Z/ x& P, M( C# v" I. k
h& H, q- Y0 S2 y5 q10.map 底层数据结构为红黑树,有序,不重复
% y4 U8 W2 i8 B$ L# l2 f$ t- g6 }% w! a& w7 w2 n2 Z) |
4 w' s2 U. T5 E! q' E! A! T11.multimap 底层数据结构为红黑树,有序,可重复
: I$ p# t; L" ~5 G/ C( k" e. W7 \9 Z) e: Y
: |: I3 Z" M. K12.hash_set 底层数据结构为hash表,无序,不重复* O$ G' g( n: \- u# D
6 g" @/ ^3 H F7 a
$ H- [" i- J5 D- y; f6 @5 Y: E
13.hash_multiset 底层数据结构为hash表,无序,可重复
# N' R8 B$ v; h1 H' [4 n; n
& F' B/ s3 ~7 ^; n8 r" ^
`7 Q6 [0 h, m5 u2 u14.hash_map 底层数据结构为hash表,无序,不重复' D" m: j$ T. v
9 @1 f* n( w/ R, d: H# K9 ?
3 c% ` p% x+ ~15.hash_multimap 底层数据结构为hash表,无序,可重复 - T8 I" A- ~1 [6 m
6 o8 m$ b% n( R: N |
|