空的向量上使用std::find会导致未定义行为吗?

3

我想了解如果在std::find中使用空向量会发生什么,但是没有找到相关信息。

我的问题是,如果将空向量传递给std::find,返回值是否总是nullptr,还是未定义的行为?

  std::vector<int> someDataContainer;
  auto it = std::find(someDataContainer.begin(), someDataContainer.end(), 1);

3
它将返回 someDataContainer.end() - Fureeish
4个回答

9
find函数在元素不存在时返回的是end迭代器:

[alg.find](强调是我的):

假设 E 为:

  • find 的情况下,*i == value
  • [...]

返回值:第一个满足 Etrue 的迭代器 i。如果没有这样的迭代器,则返回 last

这包括元素不在范围内,因为范围为空。


6

一个空向量将会有 begin() == end(),因此 std::find 会立即返回并返回 end()。这里没有未定义行为。


4
无论容器是否为空,如果未找到元素,则 std::find 将返回 end 迭代器。

而在空容器中将找不到任何元素。

简而言之:这是完全定义良好和正常的。


2

这个函数的文档可以在这里这里找到。如果找不到元素,函数会返回last,也就是在你的情况下it将指向someDataContainer.end()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接