C++中哪種操作成本最高?
1.調整大小的矢量的(減少尺寸由1)在載體哪一個在C++中代價最高,刪除最後一個元素或調整矢量大小?
回答
從http://en.cppreference.com/w/cpp/container/vector基本上引用了標準:
void pop_back();
刪除容器的最後一個元素。 除了
back()
和end()
都沒有迭代器或引用無效。
void resize(size_type count);
調整大小以包含計數元素的容器。如果當前尺寸 大於計數,則通過反覆呼叫
pop_back()
,將容器減至其第一計數 元件,如同。
所以在這種情況下,撥打resize(size() - 1)
應該等同於撥打pop_back()
。然而,致電pop_back()
是正確的做法,因爲它表達您的意圖。
注:答案是反射的changed interface C++ 11的std::vector::resize()
,其用於包含其周圍被複制(並且其可以或可以不被優化掉)一個隱藏的默認參數。
此外,'pop_back()'不會使迭代器或引用無效,因此不會發生重新分配。 – juanchopanza
@ juanchopanza當然,但縮小調整大小也不會使任何事情失效,因爲它們相當於一系列的pop_backs。儘管更新了完整的報價。 TNX! – TemplateRex
沒錯。 ''resize()'更小的尺寸用terase迭代器版本的'erase'來描述,並且這隻能使迭代器或對被擦除元素的引用無效。所以'resize','pop_back'或'erase'應該是等價的。 – juanchopanza
在我看來
2.刪除最後一個元素它們是等價的。在這兩個操作中刪除最後一個元件和減小尺寸:)
根據C++標準
空隙大小調整(SIZE_TYPE SZ)。 12個作用:如果SZ < =大小(),相當於到 調用pop_back()大小() - SZ倍
所以他們只是相當於按我的意見和觀點的標準點。 :)
此外,如果考慮的成員函數erase
代替pop_back
(事實上它們做在這種情況下是相同的),然後按照相同的標準
4複雜度:T的析構函數等於 與擦除元素的數量相等的次數,但T的移動賦值 被稱爲等於擦除元素之後的向量中的元素的數量的次數。
由於最後一個元素沒有移動操作,所以成本相同。
@ user2899162您的意思是錯誤的評論或正確的評論? :-) – juanchopanza
@ user2899162那麼,你知道這樣的實現,而不是你的bla,bla,bla嗎? –
在當前標準中注意'resize'的大小是以'erase'來表示的,但是同樣的結論是:沒有重新分配。 – juanchopanza
- 1. 擦除一個或多個元素後,矢量數組是否調整大小?
- 2. 哪一個更快使用擦除或調整矢量大小?
- 3. R:刪除矢量的最後一個元素
- 4. CSS:刪除最後一個元素,在
- 5. 多集刪除最後一個元素
- 6. 的multi_index_container刪除最後一個元素
- 7. C++中的矢量只能讀取最後一個元素
- 8. 當刪除最後一個元素,jquery刪除第一個元素
- 9. Xdocument - 刪除除最後一個以外的重複元素c#
- 10. :最後不僅刪除最後一個元素
- 11. 如何刪除列表中的最後一個元素用C
- 12. V8 C++,刪除數組中的最後一個元素
- 13. 刪除按鈕在customAdapter總是刪除最後一個元素
- 14. 爲什麼我不能刪除矢量的最後一個元素
- 15. 從最小或最大堆中刪除根元素的算法
- 16. 如何從最小 - 最大堆中刪除最大元素?
- 17. 刪除C中的鏈表第一個和最後一個元素
- 18. C++ STL vector.erase()總是刪除最後一個元素
- 19. 的Objective-C - >刪除最後一個元素的NSDictionary
- 20. 刪除整數的最後一個數
- 21. 如何刪除角元素的最後一個子元素
- 22. 刪除最小元素後重新調整二進制堆
- 23. jqGrid - 調整最後一列的大小
- 24. Clojure刪除第一個(或最後一個)元素的內部參考
- 25. 返回未知長度的矢量的最後一個元素
- 26. 從angularjs中刪除列表中的最後一個元素
- 27. 刪除最後一個字
- 28. 如何刪除一行的最後一個元素的邊距
- 29. C#asp.net刪除最後一個逗號
- 30. 最後一個元素
嘗試測量它。 – juanchopanza
優化後的庫不會重新分配。 – Erbureth
@deviantfan我不認爲重新分配將發生如果調整到一個較小的大小。我認爲這是不允許的。 – juanchopanza