在std :: list中,std :: distance(it.begin(),std :: prev(it.end())是否等于list.size()? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在std :: list中,std :: distance(it.begin(),std :: prev(it.end())是否等于list.size()? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我发现了一种我想要更好理解的行为。
我有一个带有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。
以上是关于在std :: list中,std :: distance(it.begin(),std :: prev(it.end())是否等于list.size()? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
循环在 std::list 上为迭代的 std::erase 挂起
为啥从 std::vector 中随机删除比 std::list 快?
从嵌套在 std::map 中的 std::list 中删除元素的最佳方法
Visual Studio 调试器:轻松查看 std::list(和其他 std 容器)