我的意思是,这样写是否有效:
std::vector<int> vec(100, 0);
auto it = std::find(vec.end(), vec.end(), 5);
it
是否保证是 vec.end()
或者这是某种 UB?
如果允许这种构造,这将为我节省一些案例检查的时间。
最佳答案
一对迭代器,例如vec.end()、vec.end()
是一个空范围,但它仍然是一个有效 范围。您可以在空范围内调用函数。向算法函数提供有效范围不会调用未定义的行为。正如可能的implementation中所述std::find
函数将简单地跳过这一部分:
for (; first != last; ++first) {
if (!q(*first)) {
return first;
}
}
并返回最后
迭代器:
return last;
关于c++ - 我可以在空范围内调用 <algorithm> 设施吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266680/