所以我有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;
}
答案 0 :(得分:2)
end()
将使迭代器返回到容器的最后一个元素 一个位置,因此取消引用它是不确定的。
假设您已经检查过列表不是空的并且是双向的,则可以通过减少一次最终迭代器来使迭代器到达最后一个元素。另外,您可以使用rbegin
,但这是另一种迭代器类型。
如果只需要这些值,则许多容器将具有front()
和back()
个成员,它们直接返回对该值的引用。
答案 1 :(得分:1)
假设listOne
是标准库中的容器,listOne.end()
为您提供了一个迭代器,可以过去到最后使用该容器。
取消引用此类迭代器是未定义的行为。