Lig*_*ica 13 c++ std language-lawyer
在这个问题的过程中,发现std::vector<T>::clearC++标准似乎没有时间复杂性要求.
23.2.3下的表100说:
销毁所有元素
a.使引用元素的所有引用,指针和迭代器a无效并且可能使过去的迭代器无效.发布:a.empty()退货true
而且......就是这样.在23.3.6下没有明确的条目,并且没有明确指出以下内容适用于clear:
[C++11: 23.3.6.1/1]:向量是一个支持随机访问迭代器的序列容器.此外,它支持(摊销)最后的恒定时间插入和擦除操作; 在中间插入和擦除需要线性时间.存储管理是自动处理的,但可以提供提示以提高效率.[..]
那么......这是真的吗?或者我只是错过了它?
Jon*_*ely 16
这似乎是DR 704(以及相关的DR 1301)的意外后果,它删除了clear()相当于erase(begin(), end())因为erase()需要MoveAssignable 的措辞,因为它在擦除每个元素时不需要.根据术语删除定义erase()也消除了复杂性要求.这可能是编辑性的; 我和委员会一起提出了这个问题.
NB std::deque::clear()和std::forward_list::clear()也受到影响.std::list::clear()确实有复杂性保证.
编辑:现在是http://cplusplus.github.com/LWG/lwg-active.html#2231
| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |