簡體   English   中英

是`std :: vector的時間復雜度 <T> :: clear` *真的*沒有指定?

[英]Is the time complexity of `std::vector<T>::clear` *really* not specified?

這個問題的過程中,發現似乎沒有時間復雜性要求放在C ++標准的std::vector<T>::clear

23.2.3下的表100說:

銷毀中的所有元素a 使引用a元素的所有引用,指針和迭代器無效並且可能使過去的迭代器無效。 post: a.empty()返回true

而且......就是這樣。 在23.3.6下沒有明確的條目,並且沒有明確指出以下內容適用於clear

[C++11: 23.3.6.1/1]:向量是一個支持隨機訪問迭代器的序列容器。 此外, 它支持(攤銷)最后的恆定時間插入和擦除操作; 在中間插入和擦除需要線性時間 存儲管理是自動處理的,但可以提供提示以提高效率。 [..]

那么......這是真的嗎? 或者我只是錯過了它?

這似乎是DR 704 (以及相關的DR 1301 )的意外結果,它刪除了說明clear()等同於erase(begin(), end())因為erase()需要MoveAssignable,這是不需要的擦除每個元素時 根據erase()刪除定義也消除了復雜性要求。 這可能是編輯性的; 我和委員會一起提出了這個問題。

NB std::deque::clear()std::forward_list::clear()也會受到影響。 std::list::clear()確實有復雜性保證。

編輯:現在是http://cplusplus.github.com/LWG/lwg-active.html#2231

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM