2013-02-20 23 views
12

根據Is `std::vector<primitive>::clear()` a constant time operation?的討論,注意到C++標準似乎沒有指定運行時間爲vector::clearvector :: clear未指定的複雜性是什麼?

它規定了有序(表102)和無序關聯容器(表103)(均爲線性)的運行時間list::clear(線性;第23.3.5.4.5節),.clear。但是,vector::clear似乎缺失(雖然其他vector成員,如.data.swap似乎具有指定的複雜性)。

這是真的沒有說明,還是我錯過了什麼?

+1

監督與否,如果它不在那裏,是不是沒有指定它? – Collin 2013-02-20 01:32:41

+0

是的,最後的聲明並不完全正確。感謝您的注意。 – nneonneo 2013-02-20 01:36:05

+0

我記得通過我的編譯器提供的標準庫實現的代碼進行追蹤,並發現該操作實際上是無操作的。儘管如此,我在標準中找不到任何東西,以表明操作*必須*是無操作的。 – dasblinkenlight 2013-02-20 01:41:08

回答

7

這是真的沒有說明,還是我錯過了什麼?

。目前,它確實沒有說明。

There is an open library issue for this,其文本包含指向StackOverflow上的相關Q & A的鏈接。 Jonathan Wakely對這個問題的回答澄清了發生了什麼事。

根據聯繫方案,clear()的複雜度要求應爲線性所有序列容器。但是,必須記住複雜度要求僅爲上限。每一段中的C++ 11標準的17.5.1.4/7:在庫子句指定

複雜性要求上界,並且提供更好的複雜度保證實現滿足要求。

允許進行可能的優化,但不強制它們。

即使鏈接的提議將被接受,我們也不會被允許假設clear()對於非類元素的序列容器具有O(1)複雜性,儘管這似乎是一種自然而通用的優化策略(並通過dasblinkenlightthis question on SO的回答證實了它)。

實現將被允許採用(每17.5.1.4/7)這一戰略,但他們不會被要求這樣做,是因爲在無處等標準約束是(也不是建議爲)指定。

+0

謝謝,這正是我正在尋找的。 – nneonneo 2013-02-20 02:45:03

+0

@nneonneo:很高興我有幫助 – 2013-02-20 02:47:19

相關問題