2015-11-03 74 views
1

我想從uint類型的向量v1複製到類型爲uint的v2。哪種方法更快? back_inserter或調整大小

V1擁有約750,000個元素。

選項1:

std::copy(v1.begin(), v1.end(), std::back_inserter(v2)); 

選項2:

v2.resize(v1.size()); 
std::copy(v1.begin(), v1.end(),v2.begin()); 

哪個選項會更快?我們不使用C++ 11。

謝謝!

+2

如果你添加一個v2.reserve(v1.size())到選項1,我認爲它們會非常接近。 –

+3

可靠的答案:自己進行基準測試。 –

+1

v1是float類型還是uint類型?你在前兩段中不同意你自己。 – Yakk

回答

4

你可能在努力嘗試。 :-)

v2.assign(v1.begin(), v1.end()); 

會正常工作,並根據需要照顧調整大小/儲備。

+0

如果我們不需要vector v1的內容,我們可以使用swap方法嗎? v2.swap(V1); ?因爲交換是在不變的時間:cplusplus.com/reference/vector/vector/swap – HDJEMAI

+0

@Hocine - 不,向量包含整數和浮點數,所以它們不能被交換。這些值必須被複制(並在複製過程中進行轉換)。 –

+0

@BoPersson,vector :: assign的複雜性是線性的,這是我試圖避免的。如果值類型爲TriviallyCopiable,則std :: copy將執行批量傳輸。我不確定是否將雙倍限定爲TriviallyCopiable。 – sgowd

0

這是一個非常晚的答覆,但幾年前我做了一些實驗並做了一些測量。他們可以在我的博客Copying memory from C to C++ using std::vector上找到。它還列出了其他一些選項,其結果可能對其他人很有意思。