如何合并两个std::vector ?



以下代码试图将std::mergev2变为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 << " ";
}

期望输出为:1 1 2 2 3 3

此代码的实际输出是: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 << " ";
}

我想避免这种内存开销,并在向量v1中进行就地处理。知道怎么用std::merge吗?

检查std::merge参考:

如果目标范围与输入范围重叠(输入范围可能相互重叠),则该行为未定义。

因此,您不能使用std::merge进行就地合并。试着写一个合并函数,你就知道为什么了。

最新更新