【发布时间】:2012-12-30 20:35:13
【问题描述】:
在this question 的处理过程中,发现 C++ 标准似乎对std::vector<T>::clear 没有时间复杂度要求。
23.2.3 下的表 100 说:
销毁
a中的所有元素。使所有引用a元素的引用、指针和迭代器无效,并可能使过去的迭代器无效。帖子:a.empty()返回true
然后……就是这样。在 23.3.6 下没有专门针对它的条目,也没有显式表明以下适用于clear:
[C++11: 23.3.6.1/1]:向量是支持随机访问迭代器的序列容器。此外,它支持(摊销的)恒定时间最后的插入和擦除操作;在中间插入和擦除需要线性时间。存储管理是自动处理的,但可以给出提示以提高效率。 [..]
那么……这是真的吗?还是我只是错过了它?
【问题讨论】:
-
参见 23.3.6.5/4,仍在寻找
clear作为erase(begin(),end())获取 sequences... -
@K-ballo:在哪里强制要求等效?
-
我说我还在找它:P
-
@K-ballo:哦,这就是你的意思=)是的,我也一直在寻找它......没有成功......
-
@usr:标准库是基于模板的,所以绝对没有理由不能专门针对 POD 元素类型。
标签: c++ std language-lawyer