[英]Why is boost's counting_iterator const?
我需要一個自定義隨機訪問集合類的迭代器。 我想使用帶有std::sort
的迭代器。 因為我是一個時間預算有限的C ++新手,所以我想避免自己寫整篇文章。
我的迭代器基本上只是一個簡單的size_t
。 因此,我認為boost::counting_iterator
可能是一個很好的匹配。 一旦我完成了Incrementable
我必須意識到counting_iterator
將它的引用類型定義為const Incrementable&
。
雖然我仍然對很多C ++感到困惑,但我相信這會阻止我使用帶有std::sort
的迭代器,因為const迭代器不能用於交換集合元素。
這是一個問題:為什么boost::counting_iterator
將其引用類型定義為const
,可能更重要的是,我應該使用什么呢?
為什么boost :: counting_iterator將其引用類型定義為const?
如此處所述 ,其目的是用一個對象填充數組,當迭代器遞增時,該對象本身會遞增。 簡要介紹了它的文檔(我不是Boost專家btw)它似乎拿着你遞給它的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
我應該用什么呢?
取決於你的容器。 容器的迭代器應包含指向容器中元素的指針。 您可能只是重新使用標准迭代器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.