这个问题在这里已有答案:
我发现了一种我想要更好理解的行为。
我有一个带有N个元素的std::list<int> l;
,其中N> 0(非空)。
然后我比较了std::distance
和l.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从第一个到最后一个传递迭代器所需的增量数,不是给定间隔中的元素数量。鉴于问题被重复数据删除器阻止,我无法回答我认为正确的答案并添加一个例子。
假设我们有一个大小为1的列表。然后l.end()
是[不存在的]第二个元素(索引1),prev(l.end())
是第一个元素(索引0)。那么std::distance(l.begin(), std::prev(l.end()))
是0,当它应该是1。