是向量的复杂性::清除未指定

Is the complexity of vector::clear unspecified?

本文关键字:清除 未指定 复杂性 向量      更新时间:2023-10-16

根据Is`std::vector<基元>:clear()`a constant time operation?,注意到C++标准似乎没有指定CCD_ 1的运行时间。

它规定了有序(表102)和无序关联容器(表103)(均为线性)的list::clear(线性;§23.3.5.4.5)和.clear的运行时间。然而,vector::clear似乎丢失了(尽管其他vector成员,如.data.swap,似乎具有特定的复杂性)。

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

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

。目前,它确实没有具体说明。

有一个开放库问题,其文本包含相关问答的链接;StackOverflow上的A。乔纳森·韦克利对这个问题的回答澄清了发生了什么

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

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

允许进行可能的优化,但不强制执行。

即使链接的提议将被接受,我们也不允许假设clear()对于非类元素的序列容器具有O(1)复杂性,尽管这似乎是一种自然和常见的优化策略(dasblinkenlight对SO上的这个问题的回答证实了这一点)。

实施将被允许采用该策略(根据17.5.1.4/7),但不需要这样做,因为标准中没有规定(也没有建议)此类约束。