【问题标题】:Does std::find on empty vector cause undefined behaviour?空向量上的 std::find 是否会导致未定义的行为?
【发布时间】:2019-06-03 04:21:29
【问题描述】:

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

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

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

【问题讨论】:

  • 它将返回someDataContainer.end()

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


【解决方案1】:

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

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

设 E 为:

  • *i == valuefind
  • [...]

返回:[first, last) 范围内的第一个迭代器 iEtrue如果没有找到这样的迭代器,则返回 last

这包括由于范围为空而不存在的元素。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      在空容器中找不到元素。

      简而言之:这一切都是明确且正常的。

      【讨论】:

        【解决方案4】:

        它记录在 herehere 上。如果找不到元素last,则返回,即在您的情况下,it 将指向someDataContainer.end()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-09
          • 2017-11-04
          • 2021-07-12
          • 1970-01-01
          • 2021-03-15
          • 2015-07-30
          • 1970-01-01
          • 2020-06-13
          相关资源
          最近更新 更多