簡體   English   中英

如何就地 std::merge 兩個 std::vector?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM