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

标签 c++

<分区>

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

我有一个 std::list<int> l;具有 N 个元素,其中 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 的列表。然后 l.end() 是 [不存在的] 第二个元素(索引 1)和 prev(l.end()) 是第一个元素(索引 0)。然后 std::distance(l.begin(), std::prev(l.end())) 为 0,当它应该为 1 时。

关于c++ - 在 std::list 中,std::distance(it.begin(), std::prev(it.end())) 是否等于 list.size()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55775172/

相关文章:

c++ - 重载删除和检索大小?

c++ - 将 boost::optional 与常量类型一起使用 - C++

c++ - 在静态函数中使用类成员

C++ 映射值作为列表,从列表中添加和删除元素

c++ - 如何故意丢弃 [[nodiscard]] 返回值?

c++ - 为什么这两个版本的快速排序在比较次数上存在巨大差异?

c++ - 消息映射如何与 SendMessage() 方法交互?

c++ - 是否可以直接从队列成员函数访问一对成员变量?

c++ - 简历合格的引用

c++ - 无法对匿名对象使用运算符<<