【问题标题】:Numerical range iterators in boost?boost中的数字范围迭代器?
【发布时间】:2010-10-10 05:11:39
【问题描述】:

我知道 boost 中的范围迭代器,至于this reference,似乎应该有一种简单的方法来做我想做的事,但这对我来说并不明显。

假设我想表示一个数字范围,从 0 到 100(包括与否),比如 range(0,100)。我想做类似的事情:

for_each(range<int>(0,100).begin(), range<int>(0,100).end(), do_something);

do_something 是一个函子。这个迭代器不应该有一个底层向量或类似的东西的开销,而只是提供一个整数序列。这可能与boost中的范围实现有关吗?使用普通的标准 STL 迭代器完全可以吗?

【问题讨论】:

    标签: c++ stl boost iterator range


    【解决方案1】:

    boost::counting_iterator

    #include <boost/iterator/counting_iterator.hpp>
    
    std::for_each( boost::counting_iterator<int>(0),
                   boost::counting_iterator<int>(100),
                   do_something );
    

    【讨论】:

    • 谢谢!正是我想要的......不知道我是如何错过它通过 boost 库搜索...... :)
    • boost::for_each(boost::counting_range(0,100), std::cout
    【解决方案2】:

    如果您从 C++11 的角度来补充其他答案 - 如果您更愿意使用现代的 for-each 循环,您可以使用 boost counting_range 更干净地做到这一点:

    #include <boost/range/counting_range.hpp>
    
    for(auto const &i : boost::counting_range(0, 10)) {
      std::cout << i;
    }
    

    输出:

    0123456789

    【讨论】:

    • 优秀。 :) 我竖起大拇指。 :)
    【解决方案3】:

    是的,这是可能的。似乎 boost::range 没有开箱即用的支持,但你可以

    • 使用boost::counting_iterator,它可以满足您的需求
    • 实现一个类似数字的对象,其operator*() 将返回一个数字,并将其用作range 的迭代器

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 2014-12-03
      • 2017-06-07
      • 2016-05-25
      • 2014-10-14
      • 2015-10-04
      相关资源
      最近更新 更多