簡體   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