【发布时间】:2021-03-03 14:57:28
【问题描述】:
根据我在测试基于范围的标准算法和容器中发现的结果,始终进行以下比较 it!=c.end() 也就是结束迭代器位于 != 运算符的右侧,我想知道是否有标准或一些标准保证以下内容不会出现在 STL 实现中c.end()!=it
我很好奇,因为我正在构建一个迭代器库,而我的 != 运算符看起来像这样
bool operator!=(const Iterator& lhs, const Iterator& rhs)
{
return lhs._validate();
}
只要 rhs 始终是结束迭代器,这就是有效的
【问题讨论】:
-
c.end() != it形式有时被称为尤达条件,它可以防止拼写错误it = c.end()(省略!)。此外,标准算法不假定它们在容器上工作,而是在迭代器对指定的范围内显式运行。这可以是容器的子范围。 (C++20 之前的<ranges>) -
尽你所能。