【发布时间】:2012-01-18 03:30:20
【问题描述】:
我想大多数人都明白size() 函数的复杂性并不能保证是恒定的。尽管在某些实现中,它是恒定的。
G++ 编译器可能是最常用的编译器。那么,在 G++ 的实现中,size() 的复杂度是多少?如果它因不同的容器而异,那么哪些容器具有线性复杂度?对于最常用的(如list、vector、deque、set、&map),都是常量吗?
【问题讨论】:
-
其实这取决于你的标准库实现,而不是编译器。
-
@Jon 那么,问这个问题的最佳方式是什么?我认为编译器实现了标准库?我如何找出谁实施了它以及它是如何实施的?
-
这是一个很好的问题,这就是为什么我只是查看标准以了解它的内容。事实证明,它完全指定了实现应该具有的复杂性——请参见下面的答案。
-
应该只是一个强烈的建议。一些必需的东西甚至没有被削减:)
-
@LokiAstari 肯定有类似的问题,但不同的是,询问标准的具体实现超出了它的保证。对于 GNU 的 STL 中的
std::list,这很重要。
标签: c++ stl g++ complexity-theory