List :: iterator值不正确

时间:2018-09-28 14:54:22

标签: c++ iterator

所以我有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;
}

2 个答案:

答案 0 :(得分:2)

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

假设您已经检查过列表不是空的并且是双向的,则可以通过减少一次最终迭代器来使迭代器到达最后一个元素。另外,您可以使用rbegin,但这是另一种迭代器类型。

如果只需要这些值,则许多容器将具有front()back()个成员,它们直接返回对该值的引用。

答案 1 :(得分:1)

假设listOne是标准库中的容器,listOne.end()为您提供了一个迭代器,可以过去到最后使用该容器。

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

相关问题