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

gaa*_*kam 2 c++ iterator undefined-behavior

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

std::vector<int> vec(100, 0);
auto it = std::find(vec.end(), vec.end(), 5);
Run Code Online (Sandbox Code Playgroud)

it保证是vec.end()或这是某种UB的?

如果允许这种结构,它将为我节省一些案例.

Ron*_*Ron 5

一对迭代器,例如vec.end(), vec.end()一个范围,但它仍然是一个有效的范围.您可以在空范围内调用函数.向算法函数提供有效范围不会调用未定义的行为.如可能的实现中所述,该std::find函数将简单地跳过此部分:

 for (; first != last; ++first) {
     if (!q(*first)) {
         return first;
     }
 }
Run Code Online (Sandbox Code Playgroud)

并返回last迭代器:

return last;
Run Code Online (Sandbox Code Playgroud)