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