如何为自定义输入迭代器定义指针

Posted

技术标签:

【中文标题】如何为自定义输入迭代器定义指针【英文标题】:How to define pointer for a custom input iterator 【发布时间】:2015-11-19 13:42:29 【问题描述】:

我正在编写一个自定义输入迭代器,它适应底层序列并产生转换后的值(我知道boost::transform_iterator,但这是特殊的)。

我不确定如何为此迭代器定义pointer-type。由于迭代器动态生成值,reference 被定义为value_type 的别名(允许输入迭代器,reference 必须只能转换为value_type)。我的直觉是它仍然只是value_type *,我真的想不出还有什么有意义的。

但是,我没有找到任何有关pointer 预期使用的上下文的信息,因此不知道对其有什么要求,以及boost::transform_iterator 的文档(通常提供有用的建议)对这个问题保持沉默。

所以我的问题是,将pointer 定义为value_type * 通常安全吗?如果没有,有什么替代方案?

【问题讨论】:

【参考方案1】:

我在标准中唯一能找到它们应该引用的内容来自 [iterator.traits]

[...]此外,类型

iterator_traits<Iterator>::reference
iterator_traits<Iterator>::pointer

应定义为迭代器的引用和指针类型,即对于一个迭代器对象a,分别与*aa-&gt;的类型相同。

【讨论】:

以上是关于如何为自定义输入迭代器定义指针的主要内容,如果未能解决你的问题,请参考以下文章

自定义迭代器:比如输入奇数项,反向迭代等

如何为迭代器返回“null”值?

自定义一个迭代器

通过Lua迭代器自定义实现对c#集合的遍历

python之迭代器

迭代器