早在 C++11 之前的日子里,许多书籍作者建议在需要deque
具有随机访问的动态大小容器的情况下使用。这部分是因为它deque
是一种移动通用的数据结构vector
,但也因为vector
在 C++11 之前的世界中没有提供一种方便的方法来通过“缩小到合身。” 通过方括号运算符和迭代器间接访问元素的更大开销deque
似乎被更大vector
的重新分配开销所包含。
另一方面,有些事情并没有改变。vector
仍然使用几何(即大小*因子)方案进行重新分配,并且仍然必须将其所有元素复制(或移动,如果可能)到新分配的空间中。vector
关于在前面和/或中间插入/删除元素,它仍然是旧的。另一方面,它提供了更好的参考局部性,尽管如果所使用的块deque
是“好大”的大小,那么对于许多应用程序来说,缓存方面的好处是可以争论的。
所以,我的问题是,鉴于 C++11 带来的变化,deque
是否应该继续保持动态大小/随机访问需求的 go to / first choice 容器。