c++ - boost::counting_iterator range-v3 中的模拟

标签 c++ boost range-v3

我想知道 range-v3图书馆有任何 View /实用程序提供类似于 boost::counting_iterators 的功能?

我一直在寻找那种东西,但似乎没有现成的东西。但是文档不完整(至少 README 是这样建议的)所以也许我忽略了一些东西。

UPD:我实际上在寻找的不仅仅是像 view::iota 这样的整数范围,而是接受任何 Incrementable 的范围 View (包装器)。 一个这样的例子是 Boost.CountingIterator 文档中的以下代码:

int N = 7;
std::vector<int> numbers;
...
// the code below does what I am actually looking for
// I would like to use a single range instead of two separate iterators here
std::vector<std::vector<int>::iterator> pointers;
std::copy(boost::make_counting_iterator(numbers.begin()),
          boost::make_counting_iterator(numbers.end()),
          std::back_inserter(pointers));

最佳答案

事实上,您确实需要 view::iota。它接受任何 WeaklyIncrementable 类型作为范围迭代器类型(不仅是整型),以及任何 WeaklyEqualityComparable 类型作为范围标记。所以 view::iota(0, 8) 是整数 {0,1,2,3,4,5,6,7} 的范围,而 view::iota(i, s) 是迭代器 {i,i+1,i+2,...,s} 的范围。 boost counting_iterator 示例将 range-v3 转换为 ( DEMO ):

int N = 7;
std::vector<int> numbers = ranges::view::iota(0, N);

std::vector<std::vector<int>::iterator> pointers =
    ranges::view::iota(numbers.begin(), numbers.end());

std::cout << "indirectly printing out the numbers from 0 to " << N << '\n';
ranges::copy(ranges::view::indirect(pointers),
    ranges::ostream_iterator<>(std::cout, " "));
std::cout << '\n';

关于c++ - boost::counting_iterator range-v3 中的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44448607/

相关文章:

c++ - 为什么 range-v3 库中缺少 interleave_view?

c++11 - 基于范围的算法是否可以完全独立于(但针对任何)容器类型进行优化?

c++ - 在并行算法中使用 ranges::view::iota

c++ - 从函数中按值返回 - 为什么它有效?

c++ - C++ 中 const 的优点?

c++ - 在 boost::gil 中读取图像和访问字节

c++ - boost library........预构建的变体?

c++ - 包含 boost::optional 对象的 std::vector 对象是否可移动?可移动 boost::可选?

c++ - 我的哈希键类型和函数有什么问题?

c++ - 使用 decltype() 声明函数签名