[英]Is the time complexity of `std::vector<T>::clear` *really* not specified?
[英]Is the complexity of vector::clear unspecified?
根据来自`std :: vector <primitive> :: clear()`的讨论是一个恒定时间操作吗? ,有人指出,C ++标准似乎没有指定vector::clear
的运行时间。
它指定了list::clear
(线性;§23.3.5.4.5)的运行时间, .clear
用于有序(表102)和无序关联容器(表103)(均为线性)。 但是, vector::clear
似乎缺失(尽管其他vector
成员,如.data
和.swap
似乎具有指定的复杂性)。
它真的没有说明,还是我错过了什么?
它真的没有说明,还是我错过了什么?
是的 目前,它确实没有具体说明。
有一个开放的库问题 ,其文本包含指向StackOverflow上相关问答的链接。 Jonathan Wakely对这个问题的回答澄清了一直在发生的事情。
根据链接的提议, clear()
的复杂性要求应该对所有序列容器都是线性的。 但是,必须记住,复杂性要求只是上限 。 根据C ++ 11标准的第17.5.1.4/7段:
库子句中指定的复杂性要求是上限,提供更好复杂性保证的实现满足要求。
这允许可能的优化,但不强制它们。
即使链接的提议被接受,我们也不会认为clear()
对于非类元素的序列容器具有O(1)复杂性,即使这似乎是一种自然而常见的优化策略(并且通过dasblinkenlight回答这个关于SO的问题证实了这一点。
实施将被允许采用这种策略(按照17.5.1.4/7),但是他们不需要这样做,因为标准中没有任何地方规定这样的约束(也没有建议)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.