簡體   English   中英

為什么boost的counting_iterator是const?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM