在此 question 据解释,std::for_each 在给定无效迭代器范围 [first, last) 时具有未定义的行为(即,当 last 无法通过先递增到达时)。
大概这是因为一个通用循环 for(auto it = first; it != last; ++it)
将永远在无效范围内运行。但对于随机访问迭代器来说,这似乎是一个不必要的限制,因为随机访问迭代器有一个比较运算符,并且可以将显式循环写为 for(auto it = first; it < last; ++it)
。 .这会将无效范围内的循环变成空操作。
所以我的问题是:为什么标准不允许 std::for_each 在无效的随机访问迭代器范围内具有明确定义的行为?它将简化几种只对多元素容器有意义的算法(例如排序)。使用 operator<() 而不是 operator!=() 是否会降低性能?
最佳答案
This would turn a loop over an invalid range into a no-op.
不一定是这样。
无效范围的一个示例是 first
和 last
引用不同的容器。比较此类迭代器至少会导致未定义的行为 some cases .
关于c++ - 为什么标准不允许 std::for_each 在无效的随机访问迭代器范围内具有明确定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9174121/