在C++中,std::merge
是一个算法,它用于合并两个已排序的范围(例如数组或容器中的一部分)到一个新的范围中。这个函数在<algorithm>
头文件中定义。
输入范围必须已排序
std::merge
要求输入的两个范围都必须是已排序的,且有序方向也是一致的。否则,结果将不是排序的。
目标范围必须足够大
输出范围(即目标迭代器指向的范围)必须足够大以容纳两个输入范围中所有元素的合并结果。如果目标范围不够大,可能会导致未定义行为。
源范围不会被修改
std::merge
不会修改输入范围中的元素,它会将结果写入到目标范围。
元素类型必须可比较
输入范围的元素类型必须支持比较操作(即必须定义<
操作符)。
稳定性
std::merge
是一个稳定的排序算法,即具有相同值的元素在合并后的序列中的相对顺序与它们在各自原始序列中的相对顺序相同。
用法示例:
cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v1 = {1, 3, 5};
std::vector<int> v2 = {2, 4, 6};
std::vector<int> v_merged(v1.size() + v2.size()); // 预先分配足够的空间
// 使用std::merge合并两个已排序的范围到v_merged
std::merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v_merged.begin());
// 输出合并后的v_merged
for (const auto& elem : v_merged) {
std::cout << elem << ' ';
}
std::cout << '\n';
return 0;
}
输出将是:
cpp
1 2 3 4 5 6
注意,v_merged
的大小是预先分配的,以确保它足够大以容纳合并后的结果。如果v_merged
的大小不足以容纳所有元素,将会发生未定义行为。此外,std::merge
不会修改v1
和v2
中的元素。