在C++中,std::merge
是一個算法,它用于合并兩個已排序的范圍(例如數組或容器中的一部分)到一個新的范圍中。這個函數在<algorithm>
頭文件中定義。
輸入范圍必須已排序
std::merge
要求輸入的兩個范圍都必須是已排序的,且有序方向也是一致的。否則,結果將不是排序的。
目標范圍必須足夠大
輸出范圍(即目標迭代器指向的范圍)必須足夠大以容納兩個輸入范圍中所有元素的合并結果。如果目標范圍不夠大,可能會導致未定義行為。
源范圍不會被修改
std::merge
不會修改輸入范圍中的元素,它會將結果寫入到目標范圍。
元素類型必須可比較
輸入范圍的元素類型必須支持比較操作(即必須定義<
操作符)。
穩定性
std::merge
是一個穩定的排序算法,即具有相同值的元素在合并后的序列中的相對順序與它們在各自原始序列中的相對順序相同。
?用法示例:
#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;
}
輸出將是:
1 2 3 4 5 6
注意,v_merged
的大小是預先分配的,以確保它足夠大以容納合并后的結果。如果v_merged
的大小不足以容納所有元素,將會發生未定義行為。此外,std::merge
不會修改v1
和v2
中的元素。