可以将随机访问迭代器结束递增0吗?

时间:2016-05-03 16:16:37

标签: c++ iterator language-lawyer

标题说明了一切。给定一个结束的迭代器,它可以在不调用未定义的行为的情况下递增零吗?

一个例子 - 下面的代码是否可以将迭代器返回到指定的索引 - 如果索引超出范围,则返回end

std::vector<Type>::iterator Class::fromIndex(size_t index) {
    return member_vector.begin() + std::min(index, member_vector.size());
}

如果std::advancestd::next的行为不同,那么我们也很有兴趣知道,但在此我特别感兴趣的是operator+

1 个答案:

答案 0 :(得分:6)

这是一个定义明确的无操作,比如我。

  

给定一个结束的迭代器,可以在不调用未定义的行为的情况下将其递增0吗? [..] 我特别感兴趣的是运营商+

对于随机访问迭代器,[random.access.iterators]下的表115告诉我们(在&#34;操作语义&#34; 之后,以及&#34;扩展&#34;意思是给出while循环(r += 0) ≡ r(.end() += 0) ≡ .end()

r + 0的定义就此而言。

  

如果std::advancestd::next的行为不同,那么也很有趣。

对于其他所有内容,std::next是根据std::advance定义的,[iterator.operations]中没有n明确说明这是明确定义的但是从措辞,遵循&#34;增量&#34; /&#34;减少&#34;:&#34;增量(或负i的减量)迭代器参考的英语定义n&#34;。{/ em>

FragmentManager#executePendingTransactions();

我们知道英语&#34;增量&#34; /&#34;减少&#34;在所有实际条件下,零都是无操作。