繁体   English   中英

C ++ std :: deque实现:为什么不使用循环缓冲区?

[英]C++ std::deque implementation: why not use circular buffer?

我对deque的实现进行了一些搜索。 根据这篇文章 ,deque使用向量向量。 我知道在开始和结束时推送应该是恒定的时间,并且还需要随机访问。 我认为循环缓冲区满足所有这些要求,并且更加简单。 那么为什么不使用循环缓冲区?

我还发现了增强循环缓冲区 它与deque相比如何?


编辑:好的,所以它与迭代器失效规则有关。它指出:

所有迭代器和引用都是无效的,除非插入的成员位于双端队列的末尾(前面或后面)(在这种情况下,所有迭代器都无效,但对元素的引用不受影响)

我的理解是重载像iter ++这样的运算符,迭代器必须拥有一个指向节点映射的指针和一个指向块的指针,所以如果重新分配节点映射,迭代器就会失效。 但由于数据从未移动,因此引用仍然有效。

循环缓冲区无法无限扩展。 最后,您需要分配一个新项目并复制所有项目。

Deque可以简单地在前面的向量之前分配一个新的向量,并在那里添加一个“中间”元素。 我认为它是一个矢量列表而不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM