gpt4 book ai didi

c++ - 如何将 `boost::range` 迭代器与标准迭代器一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:35 25 4
gpt4 key购买 nike

我有接受 std::vector 迭代器的函数,如

typedef std::vector<Point> Points;

Points ConvexHull(Points::const_iterator first, Points::const_iterator last);

我通常将 std 迭代器传递给它们,但偶尔我需要使用 boost 迭代器,例如 boost::join' s 范围迭代器。我应该如何更改我的函数的参数化,最好没有模板,以便它们接受两个迭代器?此外,如何在每种类型中指出我需要哪些迭代器概念?

我试着查看 boost::range 文档,但它让我非常困惑,我不知道从哪里开始。

例如,我找不到 boost::range_details::any_forward_iterator_interfaceboost::range_details::any_forward_iterator_wrapper 之间的区别,也不知道我是否应该使用其中任何一个其中指定我需要一个前向迭代器。


编辑:

如果我使用 boost::any_range,我如何传递非常量左值引用?

例如:

template<typename T>
using Range = boost::any_range<T, boost::random_access_traversal_tag,
T, std::ptrdiff_t>;


f(Range<Point> &points); // defined elsewhere

// -------------

vector<Point> vec;
f(vec); // error; cannot bind non-const lvalue reference to unrelated type

最佳答案

具有用于此目的的 any_range 并且它适合您的情况的两个目的。

https://www.boost.org/doc/libs/1_60_0/libs/range/doc/html/range/reference/ranges/any_range.html

根据您的示例,它看起来像这样:

#include <boost/range/any_range.hpp>

typedef boost::any_range<Point,
boost::bidirectional_traversal_tag,
Point,
std::ptrdiff_t
> PointRange;

关于c++ - 如何将 `boost::range` 迭代器与标准迭代器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55239931/

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