我理解clear()操作的复杂性在容器的大小上是线性的,因为必须调用析构函数.但原始类型(和POD)呢?似乎最好的做法是将矢量大小设置为0,这样复杂性就是不变的.
如果可以,std :: unordered_map也可以吗?
在这个问题的过程中,发现std::vector<T>::clearC++标准似乎没有时间复杂性要求.
23.2.3下的表100说:
销毁所有元素
a.使引用元素的所有引用,指针和迭代器a无效并且可能使过去的迭代器无效.发布:a.empty()退货true
而且......就是这样.在23.3.6下没有明确的条目,并且没有明确指出以下内容适用于clear:
[C++11: 23.3.6.1/1]:向量是一个支持随机访问迭代器的序列容器.此外,它支持(摊销)最后的恒定时间插入和擦除操作; 在中间插入和擦除需要线性时间.存储管理是自动处理的,但可以提供提示以提高效率.[..]
那么......这是真的吗?或者我只是错过了它?
根据来自`std :: vector <primitive> :: clear()`的讨论是一个恒定时间操作吗?,有人指出,C++标准似乎没有指定运行时间vector::clear.
它为有序(表102)和无序关联容器(表103)(均为线性)指定list::clear(线性;§23.3.5.4.5)的运行时间.clear.然而,vector::clear似乎缺少(虽然其他vector成员,似乎.data并且.swap似乎具有指定的复杂性).
它真的没有说明,还是我错过了什么?