传递Container的地址相当于OutputIterator?

时间:2014-05-12 12:31:25

标签: c++ cgal

CGAL文档中的第1.3.2节here主张使用OutputIterator返回convex_hull_2()的结果,因为在调用时容器为空,因此我们无法通过{{1} }。

在一个示例非CGAL程序中,我试图简单地将空容器的地址作为输出参数传递给一个函数(它将一些元素添加到容器中)并且我能够在调用者中访问这些元素。 / p>

所以我想知道容器的传递地址总是是否等同于将result.begin()传递给该容器?如果是这样,那么有没有其他特定的理由在CGAL函数中引入OutputIterator

1 个答案:

答案 0 :(得分:4)

OutputIterator的优点是您可以制作可以使用任何类型标准容器的模板。与传递地址或引用相比,另一个优点是调用者可以选择使用std::front_inserterstd::back_inserter,具体取决于他们想要的顺序,以及更快/可能的选择容器。调用者甚至可以使用自定义迭代器扩展函数的功能。

以下是将OutputIterator传递给空容器的方法:

template<class Iter>
void foo(Iter it) {}

std::list<int> bar;
foo(std::inserter(bar, bar.begin()));

只要返回的迭代器未被解除引用,就可以在空容器上调用begin()

不能简单地传递开始的原因是因为begin不是OutputIterator