【发布时间】:2026-01-29 08:55:01
【问题描述】:
Bjarne Stroustrup 在他的《The C++ Programming Language (4th Edition)》一书中指出:
请注意,
vector通常是(令人惊讶的是,除非您 了解机器架构)比list更有效 小元素的短序列(即使是insert()和erase())。
他没有进一步详细说明,所以我想知道为什么它是正确的,以及这些序列大概有多短(即元素的数量)?
【问题讨论】:
-
查看 Herb Sutter 的演讲:Modern C++: What You Need to Know。它实际上解决了它们必须有多短。 FWIW,这是一张幻灯片:i.imgur.com/XRvjKpi.png
-
这有点像说“什么更快,O(1) 或 O(n)”。有人说“显然是 O(1)”,但随后你回答“啊哈,所有输入大小的 O(1) 算法需要 30 秒,但 O(n) 算法需要
4n秒,我们只有 5 个项目时间”。确切的细节将取决于实施。 -
insert和erase不在vector的末尾是最坏情况的操作。但是如果向量的大小很小,即使是那些也可以在没有太多工作的情况下执行。简单操作的效率加上缓存一致性使它们比您想象的更快。
标签: c++ vector linked-list