首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++11增强后的deque矢量导航

C++11增强后的deque矢量导航
EN

Stack Overflow用户
提问于 2013-08-07 23:35:34
回答 2查看 695关注 0票数 5

回到C++出现之前的11天,许多书籍作者建议在需要随机访问的动态大小容器的情况下使用deque。这在一定程度上是因为deque是一种比vector更通用的数据结构,但也是因为在C++11之前的世界中,vector没有提供一种方便的方法来通过“收缩以适应”来缩小其容量。通过括号运算符和迭代器间接访问元素的较大deque开销似乎被重新分配的较大vector开销所包含。

另一方面,有些事情并没有改变。vector仍然使用几何(即大小*因子)方案进行重新分配,并且仍然必须将其所有元素复制(或移动,如果可能)到新分配的空间中。关于在前面和/或中间插入/删除元素,它仍然是相同的旧vector。另一方面,它提供了更好的引用局部性,尽管如果deque使用的块是“良好的大”大小,那么对于许多应用程序来说,缓存的好处是可以争辩的。

因此,我的问题是,鉴于C++11带来的变化,deque是否应该继续作为动态大小/随机访问需求的go to /首选容器。

EN

回答 2

Stack Overflow用户

发布于 2013-08-07 23:45:58

当你有一个不可复制+不可移动的类型(比如一个包含mutexatomic变量的类型)时,一个语言+库的改变确实会产生影响。您可以将它们存储在deque中(通过emplace_*方法之一),但不能将它们存储在vector中。

票数 4
EN

Stack Overflow用户

发布于 2013-08-07 23:49:22

Josuttis的C++标准库声明:(When to use When container Sec7.12)

默认情况下,您应该使用向量。它具有最简单的内部数据结构,并提供随机访问。因此,数据访问是方便和灵活的,并且数据处理通常足够快。

如果经常在序列的开头和结尾处插入和/或删除元素,则应使用双队列。如果删除元素时容器所使用的内部内存量很重要,那么您也应该使用deque。此外,因为向量通常使用一个内存块来存储其元素,所以双端队列可能能够包含更多元素,因为它使用了多个内存块。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18107630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档