返回正确的容器类型
Returning right container type
我正在努力正确学习C++。我开始考虑的一个问题是,如何正确地使模板函数成为正确类型的容器。一个例子是合并排序的实现。为了避免在递归步骤中将容器分成两半时必须复制容器,我想使用迭代器。这意味着我需要有一个表单的合并函数:
template<typename ForwIt, typename Comparator>
... merge(ForwIt begina, ForwIt enda, ForwIt beginb, ForwIt endb, Comparator comp)
{
Container foo;
...
return foo;
}
我的问题:
如何以习惯的方式定义具有正确返回类型的函数?
我应该用什么替换类型"容器",以便它是与要合并的组件相同的容器的实例?(我在这里假设要合并的两个参数都是相同类型容器的迭代器)
一般来说,如何使代码尽可能干净高效?
查看标准std::merge
:
template< class InputIt1, class InputIt2, class OutputIt >
OutputIt merge( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
OutputIt d_first );
执行此操作的标准方法是传递(输出)迭代器,您的函数将在其中写入结果。在 std::merge
的情况下,它还返回一个迭代器到最后一个复制的元素之后的元素
容器的标准算法将迭代器作为参数,当它们返回某些内容时,它们返回迭代器。他们从不"容器感知"。
相关文章:
- 如何在模板参数中分离函数类型返回类型和参数
- 为什么要为指针返回类型返回一系列字符?
- 有没有办法根据运行时值的类型返回 constexpr 对象
- 从弱指针返回类型返回共享指针
- 无法为unique_ptr返回类型返回 nullptr
- 为什么双重类型返回无穷大
- std::is_arithmetic 为通用 lambda 中的 int 类型返回 false:未定义的行为?
- C 策略设计具有可变类型返回值
- 根据类型返回一个值
- 在C++中,将double转换为long的类型返回了不正确的值
- 作为宏参数的安装类型返回错误:字符串常量之前的预期非限定 id
- 具有引用类型返回的函数
- C++ 如何使模板<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr
- C++模板:按类型返回值
- 以Integer返回类型返回浮点值
- 使用 C++14 的自动功能类型返回扣除代替 std::common_type 是否始终安全?
- 为什么允许新运算符向每个指针类型返回*void
- 适当的函数返回类型返回日期时间
- c++中布尔类型返回函数的默认返回值
- 在c#中使用非托管c++代码对所有double类型返回0