VecDeque
documentation表示它使用可扩展的环形缓冲区作为实现。
内部如何运作?
push_back
和pop_front
),那么移动何时完成?每次我拨打pop_front
?当内部缓冲区达到临界尺寸时?答案 0 :(得分:7)
<强> TL; DR:强>
VecDeque
有2个内部索引:一个用于头部,一个用于尾部。当您向{/ 1}}推送或弹出内容时,头部或尾部会相应地递增/递减。
让我们看看有VecDeque
和push_back
的电话会发生什么。
pop_front
你只需将缓冲区包裹起来。缓冲区现在分为两部分。
T H
Before [o o o o . . . . ]
T H
After [. o o o o . . . ]
当填充内部缓冲区并推送另一个内容时,您有三个方案in the code:
缓冲区只会增长。
H T
Before [. . . . o o o o ]
H T
After [o . . . . o o o ]
缓冲区增长后,头部在尾部后移动。
T H
Before [o o o o o o o . ]
T H
After [o o o o o o o . . . . . . . . . ]
缓冲区增长后,尾部移动到缓冲区的末尾。
H T
Before [o o . o o o o o ]
T H
After [. . . o o o o o o o . . . . . . ]