2014-06-11 67 views

回答

10

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(),其用於包含其周圍被複制(並且其可以或可以不被優化掉)一個隱藏的默認參數。

+1

此外,'pop_back()'不會使迭代器或引用無效,因此不會發生重新分配。 – juanchopanza

+0

@ juanchopanza當然,但縮小調整大小也不會使任何事情失效,因爲它們相當於一系列的pop_backs。儘管更新了完整的報價。 TNX! – TemplateRex

+0

沒錯。 ''resize()'更小的尺寸用terase迭代器版本的'erase'來描述,並且這隻能使迭代器或對被擦除元素的引用無效。所以'resize','pop_back'或'erase'應該是等價的。 – juanchopanza

0

在我看來
2.刪除最後一個元素它們是等價的。在這兩個操作中刪除最後一個元件和減小尺寸:)

根據C++標準

空隙大小調整(SIZE_TYPE SZ)。 12個作用:如果SZ < =大小(),相當於到 調用pop_back()大小() - SZ倍

所以他們只是相當於按我的意見和觀點的標準點。 :)

此外,如果考慮的成員函數erase代替pop_back(事實上它們做在這種情況下是相同的),然後按照相同的標準

4複雜度:T的析構函數等於 與擦除元素的數量相等的次數,但T的移動賦值 被稱爲等於擦除元素之後的向量中的元素的數量的次數。

由於最後一個元素沒有移動操作,所以成本相同。

+0

@ user2899162您的意思是錯誤的評論或正確的評論? :-) – juanchopanza

+0

@ user2899162那麼,你知道這樣的實現,而不是你的bla,bla,bla嗎? –

+0

在當前標準中注意'resize'的大小是以'erase'來表示的,但是同樣的結論是:沒有重新分配。 – juanchopanza

相關問題