在std :: list中,std :: distance(it.begin(),std :: prev(it.end())是否等于list.size()? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我发现了一种我想要更好理解的行为。

我有一个带有N个元素的std::list<int> l;,其中N> 0(非空)。

然后我比较了std::distancel.begin()之间的std::prev(l.end())。我期待它等于l.size(),因为l.end()是一个不存在的迭代器,因此不应该在远处考虑。

在代码形式中,为什么:

l.size() != std::distance(l.begin(), std::prev(l.end())

编辑为什么这不重复

这个问题与this question on intervals无关,因为我的问题是关于distance迭代器的性质,而不是l.begin()l.end()区间的性质,尽管有用和相关的概念。我明确表示我使用了prev(l.begin())并说明了原因。

鉴于问题中的评论,我理解了我的概念错误,我将发布并回答说无法保证distance()会给你size(),因为distance count从第一个到最后一个传递迭代器所需的增量数,不是给定间隔中的元素数量。鉴于问题被重复数据删除器阻止,我无法回答我认为正确的答案并添加一个例子。

c++
1个回答
1
投票

假设我们有一个大小为1的列表。然后l.end()是[不存在的]第二个元素(索引1),prev(l.end())是第一个元素(索引0)。那么std::distance(l.begin(), std::prev(l.end()))是0,当它应该是1。

© www.soinside.com 2019 - 2024. All rights reserved.