boost::range_iterator and boost::iterator_range confusion



我一直在浏览boost::range库,并注意到boost::range_iteratorboost::iterator_range。我在这里对这些术语感到困惑。谁能解释一下两者和何时使用什么之间有什么区别?另外,如果您可以指出我的示例,那将是很好的

任何人都可以解释两者之间有什么区别以及何时使用什么?

range_iterator用于以下方式获取范围迭代器类型:

range_iterator< SomeRange >::type

它在某种情况下与std :: iterator_traits相似。例如,您可以从迭代器中获得值类型:

std::iterator_traits<int*>::value_type

iterator_range是范围和迭代器之间的桥梁。例如 - 您有一对迭代器,并且希望将它们传递给仅接受范围的算法。在这种情况下,您可以使用iterator_range将迭代器包装到范围内。或更好 - make_iterator_range-将有助于推断类型(例如std :: make_pair做):

make_iterator_range(iterator1,iterator2)

返回范围。

考虑以下示例:

实时演示

#include <boost/range/iterator_range.hpp>
#include <boost/range/algorithm.hpp>
#include <boost/range/iterator.hpp>
#include <typeinfo>
#include <iostream>
#include <ostream>
using namespace boost;
using namespace std;
struct print
{
    template<typename T>
    void operator()(const T &t) const
    {
        cout << t << " ";
    }
};
int main()
{
    typedef int Array[20];
    cout << typeid( range_iterator<Array>::type ).name() << endl;
    Array arr={11,22,33,44,55,66,77,88};
    boost::for_each( make_iterator_range(arr,arr+5) ,print());
}

另外,如果您可以指出我的示例,那将是很好的

以获取快速摘要 - 检查此幻灯片

通常,您将不会直接使用boost::range_iterator,因为它是一个模板元功能,它采用给定的范围(无论范围的类型如何),并返回它的类型开始()/end()方法。

boost::iterator_range用于创建从一对预先存在的迭代器的新范围。通常,您通常会使用基于迭代器并将其转换为范围的代码时使用。

相关内容

  • 没有找到相关文章

最新更新