vector :: clear的复杂性是未指定的吗?

nne*_*neo 12 c++ vector language-lawyer

根据来自`std :: vector <primitive> :: clear()`的讨论是一个恒定时间操作吗?,有人指出,C++标准似乎没有指定运行时间vector::clear.

它为有序(表102)和无序关联容器(表103)(均为线性)指定list::clear(线性;§23.3.5.4.5)的运行时间.clear.然而,vector::clear似乎缺少(虽然其他vector成员,似乎.data并且.swap似乎具有指定的复杂性).

它真的没有说明,还是我错过了什么?

And*_*owl 7

它真的没有说明,还是我错过了什么?

是的.目前,它确实没有具体说明.

有一个开放的图书馆问题,其文本包含一个链接到相关的Q&A在计算器上.通过回答乔纳森Wakely这个问题阐明了什么事情.

根据链接的提议,所有序列容器的复杂性要求clear()应该是线性的.但是,必须记住,复杂性要求只是上限.根据C++ 11标准的第17.5.1.4/7段:

库子句中指定的复杂性要求是上限,提供更好复杂性保证的实现满足要求.

允许可能的优化,但不强制它们.

即使链接的提议被接受,我们也不会假设clear()对于非类元素的序列容器具有O(1)复杂性,即使这似乎是一种自然而常见的优化策略(并且由dasblinkenlight提供答案)对这个问题的SO证实了这一点).

实施将被允许采用这种策略(按照17.5.1.4/7),但是他们不需要这样做,因为标准中没有任何地方规定这样的约束(也没有建议).