我对双端队列的实现进行了一些搜索。根据this post,双端队列使用 vector vector。我知道在开始和结束时都应该在固定时间内进行推送,并且还需要随机访问。我认为循环缓冲区可以满足所有这些要求,并且要简单得多。那么为什么不使用循环缓冲区呢?
我还找到了boost circular buffer。它与双端队列相比如何?
编辑:
好的,所以它与Iterator Invalidation Rules有关,它指出:
我的理解是像iter++这样的重载运算符,迭代器必须拥有一个指向节点映射的指针和一个指向块的指针,因此,如果重新分配了节点映射,迭代器将无效。但是由于数据永远不会移动,因此引用仍然有效。
最佳答案
循环缓冲区不能无限扩展。最终,您需要分配一个新的项目并复制所有项目。
Deque可以简单地在前一个 vector 之前分配一个新 vector ,并在其中添加一个“中间”元素。我认为它是 vector 列表。
关于C++ std::deque实现:为什么不使用循环缓冲区?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40275112/