【发布时间】:2011-04-29 10:15:45
【问题描述】:
在示例代码中,我经常看到诸如*it++ 之类的代码用于输出迭代器。表达式*it++ 复制it,递增it,然后返回最终取消引用的副本。据我了解,制作输出迭代器的副本会使源无效。但是在创建副本之后执行的it 的增量是非法的,对吧?我对输出迭代器的理解有缺陷吗?
【问题讨论】:
-
为什么复制迭代器(输出或其他)会使它失效?当我们说诸如
vector<int>::iterator it(container.begin());之类的话时,我们不是经常这样做吗? -
@Adrian:例如,SGI documentation 说:“在任何时候都应该只有一个输出迭代器的一个活动副本。即:在创建和使用一个副本 x 之后输出迭代器 y,不应再使用原来的输出迭代器 y。”不过,我不确定在这种情况下“使用”输出迭代器是什么意思。取消引用?递增?
-
我看到了
out_iterator a(b);之后的暗示,b可能像你说的那样在 SGI 文档中无效,但 C++03 中没有任何暗示。但由于 SGI 页面和 C++03 都明确表示表达式*it++ = value必须有效,因此该要求覆盖了有关该使用的任何其他问题。
标签: c++ stl iterator post-increment