[英]How to std::merge two std::vector in-place?
以下代碼嘗試將std::merge
v2
合並到v1
中。
std::vector<int> v1{1,2,3,0,0,0};
std::vector<int> v2{1,2,3};
std::merge(v1.begin(), v1.begin() + 3, v2.begin(), v2.end(), v1.begin());
for (auto i : v1)
{
std::cout << i << " ";
}
預期的 output 為: 1 1 2 2 3 3
此代碼的實際 output 是: 1 1 1 1 2 3
解決此問題的一個潛在方法是創建一個臨時向量。
std::vector<int> v1{1,2,3,0,0,0};
std::vector<int> v2{1,2,3};
std::vector<int> tmp(v1.size());
std::merge(v1.begin(), v1.begin() + 3, v2.begin(), v2.end(), tmp.begin());
for (auto i : tmp)
{
std::cout << i << " ";
}
我想避免這種 memory 開銷並在向量v1
中就地執行。 知道如何使用std::merge
做到這一點嗎?
檢查std::merge
參考:
如果目標范圍與任一輸入范圍重疊(輸入范圍可能相互重疊),則行為未定義。
因此,您不能使用std::merge
進行就地合並。 試着寫一個合並 function 你就會知道為什么了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.