【发布时间】:2016-08-05 15:32:05
【问题描述】:
我知道std::list::operator[] 没有实现,因为它的性能很差。但是std::vector::insert 和std::list::operator[] 一样低效。背后的解释是什么?
【问题讨论】:
-
“效率低下”确实取决于,但这不是可以假设的。
-
“效率低下” - 高度投机 并且完全取决于使用场景。您的问题将很好地证明情况确实如此。
-
对于
std::list::operator[],如果你真的想要,你可以自己做,对于std::vector::insert,你不能。 -
这两种方法都可以任意使用。因此,对于某些特定情况,我认为没有必要讨论它们。但是对于其中之一,实施被认为是不合适的。为什么?
-
@WhozCraig:你的断言非常没有帮助。你必须知道他们错了。你不可能不知道他们是秃头。无论如何,对于其他读者:
vector::insert和假设的list::operator[]通常在容器的大小 n 上具有 O(n) 复杂度。然而,索引运算符可以针对顺序访问进行优化。向量对原始数组的直接索引的有效要求使得顺序插入优化可能是不可能的。