我可以打电话给<algorithm>空旷的设施吗?

May I call <algorithm> facilities on empty ranges?

本文关键字:设施 algorithm 打电话 lt 我可以 gt      更新时间:2023-10-16

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

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

it保证是vec.end()还是某种 UB?

这将节省我一些案例检查是否允许此结构。

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

 for (; first != last; ++first) {
     if (!q(*first)) {
         return first;
     }
 }

并返回last迭代器:

return last;