繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM