2012-06-28 17 views
2

我有了一個矢量成員變量,我填補瞭如下一類:C++ vector:我應該複製還是交換?

class Foo { 
vector<int> v; 
void g() { 
    vector<int> w; 
    // fill w 
    v = w; 
} 

}; 

我的問題:臨時向量W可以長到很大,我不想付出代價 的複製建設。我應該使用std :: swap而不是複製到這裏嗎?我的理解 是std :: swap會因矢量的專門化而更高效(其中 只會將指針交換到堆中)。

+3

難道你不能直接填寫'v'而不是使用臨時? – netcoder

+1

這取決於:你需要複製或交換? –

+1

@netcoder:這不會是異常安全的。 –

回答

13

是的,你應該在這裏交換。在C++ 11中,你也可以說v = std::move(w);

無論哪種方式,變量w立即超出範圍,因此其內容無關緊要,您也可以轉讓所有權而不是複製。

+0

使用C++ 11時,有什麼情況我們更喜歡交換移動 – ATemp

+1

@ATemp:當您需要* swap *而不是* move *時?也就是說,當你只是想交換對象的狀態時(這些對象都不會直接超出範圍)。 –

相關問題