std :: find在空向量上是否会导致未定义的行为?

Yuc*_*l_K 1 c++ vector std c++11

试图找到一个信息,如果在std :: find期间使用了一个空向量,但找不到任何信息,那么会发生什么.

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

  std::vector<int> someDataContainer;
  auto it = std::find(someDataContainer.begin(), someDataContainer.end(), 1);
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 7

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

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

设E是:

  • *i == value对于find,
  • [...]

返回:第一个迭代器i范围内[first, last)为其êtrue.如果没有找到这样的迭代器,则返回last.

这包括元素不存在,因为范围是空的.


Som*_*ken 5

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


Som*_*ude 5

无论容器是否为空,如果没有找到元素,std::find都会返回迭代器。end

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

简而言之:一切都很明确且正常。