OStack程序员社区-中国程序员成长平台

标题: c++ - boost::range_iterator 和 boost::iterator_range 混淆 [打印本页]

作者: 菜鸟教程小白    时间: 2022-10-25 09:08
标题: c++ - boost::range_iterator 和 boost::iterator_range 混淆

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



Best Answer-推荐答案


Could anyone please explain what is the difference between two and when to use what?

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)

返回范围。

考虑以下示例:

live demo

#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());
}

Also, it would be nice if you can point me to sample examples where the boost range library is used to know more about it apart from the documentation

如需快速总结,请查看 this slides

关于c++ - boost::range_iterator 和 boost::iterator_range 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13286876/






欢迎光临 OStack程序员社区-中国程序员成长平台 (http://ostack.cn/) Powered by Discuz! X3.4