我正在努力学习C ++。我开始思考的一个问题是如何正确地使模板功能成为正确类型的容器。一个例子是合并排序的实现。为了避免在递归步骤中将它分成两半时必须复制一个容器,我想使用迭代器。这意味着我需要具有以下形式的合并功能:
template<typename ForwIt, typename Comparator>
... merge(ForwIt begina, ForwIt enda, ForwIt beginb, ForwIt endb, Comparator comp)
{
Container foo;
...
return foo;
}
我的问题:
如何以惯用的方式使用正确的返回类型定义函数?
我应该将“Container”类型替换为什么,以便它是与要合并的组件相同的容器的实例? (我在这里假设要合并的两个参数都是相同类型容器的迭代器)
一般来说,如何使代码尽可能干净有效?
答案 0 :(得分:4)
查看标准std::merge
:
template< class InputIt1, class InputIt2, class OutputIt >
OutputIt merge( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
OutputIt d_first );
执行此操作的标准方法是传递一个(输出)迭代器,您的函数将在其中写入结果。在std::merge
的情况下,它还返回复制的最后一个元素之后的元素的迭代器
容器的标准算法将迭代器作为参数,当它们返回某些东西时,它们返回迭代器。他们永远不会感受到容器&#34;。