Boost中irange和counting_range之间的区别

Ala*_*ing 8 c++ boost integer range counting

irange和之间有什么区别counting_range

我需要irange快速生成一系列整数,如下所示:

auto example = boost::irange(0, 5); /// result is {0, 1, 2, 3, 4}
Run Code Online (Sandbox Code Playgroud)

但是注意到某个地方(失去了链接)的一个例子,而是谈到counting_range要完成同样的任务.有没有简单解释这两者之间的区别?

R. *_*des 27

主要区别irange在于是随机访问范围而counting_range不是随机访问范围.counting_range基于Boost.Iterator counting_iterator,它直接使用所有底层整数操作.C++中的整数几乎符合迭代器的概念:唯一缺少的是一个operator*.counting_iterator提供一个operator*身份操作,并将其他所有内容转发给基础类型.

另一个区别是,irange它还支持不同于1的增量.

它们都没有实现它们迭代的整个整数范围,因此它们都使用O(1)内存.