【问题标题】:pre/post increment operator on OutputIteratorOutputIterator 上的前/后增量运算符
【发布时间】:2015-08-20 19:39:03
【问题描述】:

我在OutputIterator 上的一篇文章中读到,我们只能将其取消引用为左值。我的问题是关于 operator++ 它将迭代器增加一个位置。

所以,

*it++ = t 

{*it = t; ++it; }

https://www.sgi.com/tech/stl/OutputIterator.html

现在,我假设 operator++ 会以这样一种方式重载,以至于 OutputIterator 会增加一个位置。

ostream_iterator 也是一个OutputIterator 并实现了OutputIterator 的所有要求。

那为什么operator++ostream_iterator中实现如下图?

ostream_iterator<T,charT,traits>& operator++() { return *this; }
ostream_iterator<T,charT,traits>& operator++(int) { return *this; }

http://www.cplusplus.com/reference/iterator/ostream_iterator/

这表明operator++ 什么都不做。

取消引用输出运算符是否会分配一个新值并将其提前一位?不使用operator++

如果是这样,那为什么我们需要实现operator++

【问题讨论】:

    标签: c++ stl stream iterator


    【解决方案1】:

    The use of this operator is formalOutputIterator 必须支持 ++ 运算符,无论它是否有任何影响。

    【讨论】:

    • 谢谢。那么如果 ++ 运算符什么都不做,那么迭代器如何增加?你能澄清一下吗
    • 查看您提供的链接并按照 ++ 运算符 (cplusplus.com/reference/iterator/ostream_iterator/operator++) 的说明进行操作:Streams just “插入时自动前进”
    • @YADAV ostream_iterator::operator= 是增量发生的地方,但即使在那里它也是间接发生的。当operator= 向迭代器正在包装的ostream 写入一个值时,插入该值后流会自动前进。
    • 感谢@Praetorian。现在我得到了答案。
    • 这里有个小疑问,为什么 SGI 链接说 ++x :x 指向下一个可以存储值的位置。我有点困惑
    猜你喜欢
    • 2016-02-02
    • 2012-10-17
    • 2012-08-06
    • 2011-03-12
    • 2015-10-16
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多