gpt4 book ai didi

c++ - 传递相当于 OutputIterator 的 Container 地址?

转载 作者:行者123 更新时间:2023-11-30 01:53:03 25 4
gpt4 key购买 nike

第 1.3.2 节 here在 CGAL 文档中主张使用 OutputIterator 返回 convex_hull_2() 的结果,因为调用时容器为空,因此我们无法传递 result.begin()

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

所以我想知道传递一个容器的地址是否总是等同于传递一个OutputIterator给那个容器?如果是这样,那么在 CGAL 函数中引入 OutputIterators 是否有任何其他具体原因?

最佳答案

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 的原因是因为 begin 不是 OutputIterator

关于c++ - 传递相当于 OutputIterator 的 Container 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23609151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com