返回正确的容器类型

Returning right container type

本文关键字:类型 返回      更新时间:2023-10-16

我正在努力正确学习C++。我开始考虑的一个问题是,如何正确地使模板函数成为正确类型的容器。一个例子是合并排序的实现。为了避免在递归步骤中将容器分成两半时必须复制容器,我想使用迭代器。这意味着我需要有一个表单的合并函数:

template<typename ForwIt, typename Comparator>
... merge(ForwIt begina, ForwIt enda, ForwIt beginb, ForwIt endb, Comparator comp)
{
   Container foo;
   ...
   return foo;
}

我的问题:

  1. 如何以习惯的方式定义具有正确返回类型的函数?

  2. 我应该用什么替换类型"容器",以便它是与要合并的组件相同的容器的实例?(我在这里假设要合并的两个参数都是相同类型容器的迭代器)

一般来说,如何使代码尽可能干净高效?

查看标准std::merge

template< class InputIt1, class InputIt2, class OutputIt >
OutputIt merge( InputIt1 first1, InputIt1 last1,
                InputIt2 first2, InputIt2 last2,
                OutputIt d_first );

执行此操作的标准方法是传递(输出)迭代器,您的函数将在其中写入结果。在 std::merge 的情况下,它还返回一个迭代器到最后一个复制的元素之后的元素

容器的标准算法将迭代器作为参数,当它们返回某些内容时,它们返回迭代器。他们从不"容器感知"。