2011-04-29 21 views
3

我剛開始在我的本地大學學習C++類,並且講師給了這個類一個任務,我們必須創建一個向量並從堆棧中移除一個元素。這種從堆棧中移除元素的方法是如何工作的?

她提供了這個例子:

vect[3] = vect[vect.size()-1]; 
vect.pop_back(); 

現在..我已經測試了它和它的作品,我只是不確定它是如何工作以及爲什麼它的工作原理。我敢肯定有人可以提供一個簡單的解釋?

+1

請注意,該示例僅適用於堆棧操作(push和pop)。要清除堆棧中間的元素,您需要創建一個新堆棧,彈出推送元素到新堆棧,彈出要刪除的元素,然後彈出 - 將其推回原始位置。 – Jan 2011-04-29 11:18:48

回答

5

你想從矢量中間刪除一個元素,所以你只需用最後一個元素覆蓋它(索引爲size()-1) - 因爲最後一個元素因此變成了冗餘,我們可以pop_back()它。最後我們得到所需的結果 - 向量大小減1,舊的值vect[3]消失。

注意,這不保留在向量元素的順序,但它是相對高效 - 從矢量的中間刪除可能涉及大量的內存複製,因爲所有的元素後要刪除的元素需要移動一個以適應差距(請記住:一個std::vector將其元素存儲在連續存儲中)。從最後擦除幾乎沒有成本。

相關問題