我正在寻找一种我想更好理解的行为。
我有一个带有 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 从第一个传递到最后一个传递的迭代器所需的增量数,而不是给定间隔中的元素数。鉴于该问题已被重复数据删除器阻止,我无法回答我认为正确的答案,并添加示例。
答案 0 :(得分:1)
假设我们有一个大小为1的列表,则l.end()
是[不存在]第二元素(索引1),prev(l.end())
是第一元素(索引0)。然后std::distance(l.begin(), std::prev(l.end()))
为0,应为1。