无题
概述
STL容器的clear的时间复杂度不是O(1)
可能很多人都不在意,在使用STL容器的时候,潜意识里面将clear()
成员函数视为常量时间复杂度O(1)的。但是其实不然。我感觉可能是很多人都知道对于vector
而言,clear()
之后,修改了size()
的结果,不影响capacity()
的结果,因而得出clear()
只是修改了某个标记,是常量时间复杂度的错误结论。
其实C++标准明确指出不管是序列容器(比如vector
)还是关联容器(比如unordered_map
)其clear()
成员函数都是线性时间复杂度O(n)的。因为只要执行了clear()
就需要对其存储的元素调用析构函数,这个析构操作显然是逐个析构的。因而时间复杂度是O(n)。
auto替代手写类型
比如在基于范围的循环中尽量使用auto&
,否则容易踩坑。这个观点在Scott Meryer的《Effictive Modern C++》
一书的条款5中已经讲得很清楚了。
下面简要概述一下,对于unordered_map
而言,其中的元素类型是:
1 | std::pair<const std::string, int> |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦溪·在路上!
评论
ValineDisqus