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

时间:2019-04-20 15:52:48

标签: c++

我正在寻找一种我想更好理解的行为。

我有一个带有 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 从第一个传递到最后一个传递的迭代器所需的增量数,而不是给定间隔中的元素数。鉴于该问题已被重复数据删除器阻止,我无法回答我认为正确的答案,并添加示例。

1 个答案:

答案 0 :(得分:1)

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

相关问题