为什么boost的counting_iterator是const?

时间:2016-08-09 11:50:56

标签: c++ boost

我需要一个自定义随机访问集合类的迭代器。我想使用std::sort的迭代器。因为我是一个时间预算有限的C ++新手,所以我想避免自己写完整篇文章。

我的迭代器基本上只是一个简单的size_t。因此,我认为boost::counting_iterator可能是一个很好的匹配。完成Incrementable后,我必须意识到counting_iterator将其引用类型定义为const Incrementable&

虽然我仍然对很多C ++感到困惑,但我相信这会阻止我使用std::sort的迭代器,因为const迭代器不能用于交换集合元素。

以下是问题:为什么boost::counting_iterator将其引用类型定义为const,而且可能更重要的是,我应该使用什么呢?

1 个答案:

答案 0 :(得分:1)

  

为什么boost :: counting_iterator将其引用类型定义为const?

它的目的as described here是用一个对象填充数组,当迭代器递增时,该对象本身会递增。简要介绍了它的文档(我没有提升专家顺便说一句),它似乎持有你提交的Incrementable对象的副本。然后它将const引用返回到其内部副本,以阻止某人修改其内部副本。

  

一旦我完成了Incrementable,我必须意识到counting_iterator将其引用类型定义为const Incrementable&。

是的,当取消引用时,它将返回对它所持有的Incrementable对象的常量引用,该对象本身是非常量的(因此它可以递增和递减)。

  

我相信这会阻止我使用带有std :: sort的迭代器,因为const迭代器不能用于交换集合元素。

正确:)在引擎盖下,交换看起来像

using T = size_t;
T tmp = a;
a = b;    // requires a to be non-constant
b = tmp;  // requires b to be non-constant
  

我应该使用什么?

取决于您的容器。容器的迭代器应包含指向容器中元素的指针。您可能只是重新使用标准迭代器。