📜  C++ STL中的merge()(1)

📅  最后修改于: 2023-12-03 14:39:52.007000             🧑  作者: Mango

C++ STL 中的 merge()

在 C++ STL 中,merge() 是一个函数,它用于将两个已排序的序列合并成一个新的已排序序列。该函数定义在 <algorithm> 头文件中。

函数原型

merge() 函数有以下原型:

template<class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
                      InputIterator2 first2, InputIterator2 last2,
                      OutputIterator result);

其中:

  • first1:第一个已排序序列的起始位置;
  • last1:第一个已排序序列的截止位置;
  • first2:第二个已排序序列的起始位置;
  • last2:第二个已排序序列的截止位置;
  • result:合并后的新序列的起始位置。

合并后的新序列是按升序排列的。

功能

merge() 函数的主要功能是将上述两个已排序序列合并成一个新的已排序序列。如果 first1last1 的元素列表中的所有值都小于 first2last2 的元素列表中的所有值,那么合并后的序列将保持原来的两个序列的相对排序关系。

使用示例

考虑以下示例代码,它演示了如何使用 merge() 将两个已排序序列合并成一个新序列:

#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
    std::vector<int> v1{1, 5, 9};
    std::vector<int> v2{2, 3, 6, 8};

    std::vector<int> v3(v1.size() + v2.size());

    // 合并 v1 和 v2,将结果写入 v3 中
    std::merge(std::begin(v1), std::end(v1),
               std::begin(v2), std::end(v2),
               std::begin(v3));

    // 打印 v3 中的元素
    for (const auto& i : v3) {
        std::cout << i << " ";
    }

    return 0;
}

运行以上代码的输出将是:

1 2 3 5 6 8 9 
注意事项
  • 需要将两个已排序序列作为参数传递给 merge() 函数。
  • 新序列必须具有足够的空间来容纳合并后的元素,否则会导致 undefined behavior。
  • 原始序列将保持不变,因此合并结果将写入新的序列中。