c++ - 我可以在空范围内调用 <algorithm> 设施吗?

标签 c++ iterator undefined-behavior

我的意思是,这样写是否有效:

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/

相关文章:

iterator - 切片迭代器能否在恒定时间内前进多个元素?

c++ - 那么为什么 i =++i + 1 在 C++11 中定义良好?

c++ - 导致时间旅行的未定义行为

C++多维数据可视化

c++ - Protocol Buffer 可以序列化 hash_multimap 吗?

java - 如何在java中一个接一个地遍历两个不同类型的泛型列表?

c++ - 两个不完全相同的函数指针是否兼容?

c++ - 如何初始化类内浮点常量?

c++ - 为什么我的程序返回 5?

c++ - 忽略外部 vector 位置的嵌套 vector 迭代