【问题标题】:List::iterator value not correctList::iterator 值不正确
【发布时间】:2018-09-28 14:54:21
【问题描述】:

所以我有 ListOne 和 ListTwo,它们都包含 {9, 11, 12}。但是,在下面的代码中,保存列表末尾值的迭代器保存的值甚至不在列表中。 编辑:所以我发现 listOne.end() 正在返回列表的大小。为什么?

auto firstIteratorBegin = listOne.begin();
auto secondIteratorBegin = listTwo.begin();
auto firstIteratorEnd = listOne.end();
auto secondIteratorEnd = listTwo.end();

//Check if two lists are in the same range.
if(*firstIteratorEnd < *secondIteratorBegin || *secondIteratorEnd < *firstIteratorBegin)
{
    return false;
}

【问题讨论】:

标签: c++ iterator


【解决方案1】:

end() 将返回一个迭代器到容器的最后一个元素的位置,因此取消引用它是未定义的。

假设您已经检查了列表不是空的并且是双向的,您可以通过将结束迭代器递减一次来获取最后一个元素的迭代器。或者,您可以使用 rbegin,但这是一种不同的迭代器类型。

如果您只是想要这些值,许多容器将有 front()back() 成员直接返回对值的引用。

【讨论】:

    【解决方案2】:

    假设listOne 是标准库中的一个容器,listOne.end() 为您提供了一个迭代器,用于指向容器的past-the-end

    取消引用此类迭代器是未定义的行为

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多