我想從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。
謝謝!
我想從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。
謝謝!
你可能在努力嘗試。 :-)
v2.assign(v1.begin(), v1.end());
會正常工作,並根據需要照顧調整大小/儲備。
如果我們不需要vector v1的內容,我們可以使用swap方法嗎? v2.swap(V1); ?因爲交換是在不變的時間:cplusplus.com/reference/vector/vector/swap – HDJEMAI
@Hocine - 不,向量包含整數和浮點數,所以它們不能被交換。這些值必須被複制(並在複製過程中進行轉換)。 –
@BoPersson,vector :: assign的複雜性是線性的,這是我試圖避免的。如果值類型爲TriviallyCopiable,則std :: copy將執行批量傳輸。我不確定是否將雙倍限定爲TriviallyCopiable。 – sgowd
這是一個非常晚的答覆,但幾年前我做了一些實驗並做了一些測量。他們可以在我的博客Copying memory from C to C++ using std::vector上找到。它還列出了其他一些選項,其結果可能對其他人很有意思。
如果你添加一個v2.reserve(v1.size())到選項1,我認爲它們會非常接近。 –
可靠的答案:自己進行基準測試。 –
v1是float類型還是uint類型?你在前兩段中不同意你自己。 – Yakk