首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >STL中的向量与列表

STL中的向量与列表
EN

Stack Overflow用户
提问于 2010-02-05 17:54:54
回答 15查看 353K关注 0票数 297

我在有效的STL中注意到

向量是默认情况下应该使用的序列类型。

这是什么意思?似乎忽略效率,vector可以做任何事情。

有人能给我提供一个场景,vector不是一个可行的选项,但必须使用list

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2010-02-05 17:56:35

在某些情况下,您想要在任何地方插入许多项,但要重复顺序的结尾。

检查每种不同类型的容器的复杂性保证:

标准容器的复杂性保证是什么?

票数 118
EN

Stack Overflow用户

发布于 2010-02-05 18:05:05

如果您不需要经常插入元素,那么向量就会更有效。它比列表具有更好的CPU缓存局部性。换句话说,访问一个元素很可能使下一个元素存在于缓存中,并且可以在不需要读取缓慢RAM的情况下被检索。

票数 41
EN

Stack Overflow用户

发布于 2013-03-27 14:33:14

这里的大多数答案都忽略了一个重要的细节:为什么?

你想把什么放在集装箱里?

如果它是int的集合,那么std::list在每个场景中都会丢失,不管您是否可以重新分配,您只能从前面删除等等。列表遍历速度较慢,每次插入都需要与分配器进行交互。要准备一个list<int>胜过vector<int>的例子将是非常困难的。即使如此,deque<int>也可能更好或更接近,而不是限制列表的使用,这将带来更大的内存开销。

然而,如果您正在处理大的、丑陋的数据块--而且很少--您不希望在插入时过多分配,而由于重新分配而进行复制将是一场灾难--那么使用list<UglyBlob>可能比使用vector<UglyBlob>更好。

尽管如此,如果您切换到vector<UglyBlob*>,甚至是vector<shared_ptr<UglyBlob> >,那么列表将再次落后。

因此,访问模式、目标元素计数等仍然会影响比较,但在我看来--元素大小--复制成本等等。

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

https://stackoverflow.com/questions/2209224

复制
相关文章

相似问题

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