结束迭代器总是在比较的rhs中吗



根据我在基于测试范围的标准算法和容器中发现的内容,总是进行以下比较it!=c.end(),也就是说,结束迭代器位于!=操作员和我想知道是否有标准或一些保证,以下内容不会出现在STL实现c.end()!=it

我很好奇,因为我正在构建一个迭代器库和我的!=操作员看起来像这个

bool operator!=(const Iterator& lhs, const Iterator& rhs)
{
return lhs._validate();
}

只要rhs始终是结束迭代器,哪个就有效

it!=c.end()为false时,从技术上讲,结束迭代器位于比较的两侧。

不要求写入it!=c.end()而不是c.end()!=it,也不保证不会写入后者。两者都是同等允许的。此外,完全有可能比较的迭代器都不是结束迭代器:c.begin()!=c.begin()是完全好的。因此,你的建议行不通。

书写变化中的";变量";在左边;常数";具有已知性质的权利在编程中是传统的,在英语中也是自然的:;迭代器在末尾吗"而不是";迭代器在末尾吗&";。

23.3.1一般情况下[iterator.requestions.general]
1迭代器是指针的泛化,允许C++程序以统一的方式处理不同的数据结构(例如,容器和范围(
2由于迭代器是指针的抽象,它们的语义是C++中大多数指针语义的概括。这确保了每个使用迭代器的函数模板都能与常规指针一起工作。

指针的比较是定义良好的,即使其中任何一个是空指针或超过结束指针。它们具有交换性质,即当自变量的顺序颠倒时,结果保持不变。因此,使用迭代器的比较函数应该以类似的方式运行,而不仅仅是随机取消引用参数或要求其中一个参数不超过结束迭代器。

相关内容

最新更新