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

时间:2019-01-08 13:02:28

标签: c++ c++11 vector std

试图查找有关在std :: find期间使用空向量但没有太多运气查找任何信息的情况会发生什么情况的信息。

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

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

4 个答案:

答案 0 :(得分:7)

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

  

[alg.find](重点是我):

     

让E为:

     
      
  • *i == value代表find
  •   
  • [...]
  •   
     

返回:范围为{{1}的i中的第一个迭代器[first, last),其中 E true如果找不到这样的迭代器,则返回last

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

容器是否为空无关紧要,如果找不到元素,std::find将返回end迭代器。

在一个空容器中找不到元素。

简而言之:定义明确且正常。

答案 3 :(得分:2)

它记录在herehere上。如果找不到元素last,则返回it指向someDataContainer.end()