为了更好地理解容器的结构,我决定全部实现。现在我在std::deque上遇到了一个问题,我了解双连接队列的原理,但我不明白 std 卡组是如何工作的,即:如何在 O(1) 中从两侧添加元素同时具有像这样或 O(1) 的随机访问速度。所有熟悉的程序员都说标准卡组是作为双向链表实现的,其中的元素是固定大小的块,但是随机访问 O(1) 是如何实现的呢?这是一个这样的问题。
为了更好地理解容器的结构,我决定全部实现。现在我在std::deque上遇到了一个问题,我了解双连接队列的原理,但我不明白 std 卡组是如何工作的,即:如何在 O(1) 中从两侧添加元素同时具有像这样或 O(1) 的随机访问速度。所有熟悉的程序员都说标准卡组是作为双向链表实现的,其中的元素是固定大小的块,但是随机访问 O(1) 是如何实现的呢?这是一个这样的问题。
实现
std::deque不是秘密 - 你可以看到它的排序。但是对于一个没有准备的人来说,有一点黑暗。但是图片中有http://cpp-tip-of-the-day.blogspot.com/2013/11/how-is-stddeque-implemented.html简而言之 - 有两种实现方式 - 向量被组合成一个链表和一个向量向量。
在 SO 上,他们只是确认实现使用向量的向量和固定大小的内部向量。
但是在 gcc 的通信中,他们讨论了使用循环缓冲区的可能性。
还有更多图片和文字 - https://www.quora.com/What-is-a-possible-implementation-for-std-deque