在 std::list 中,std::d istance(it.begin(), std::p rev(it.end()
In an std::list, is the std::distance(it.begin(), std::prev(it.end())) equal to list.size()?
我正在发现一种我想更好地理解的行为。
我有一个包含 N 个元素的std::list<int> l;
,其中N>0(非空)。
然后我比较了l.begin()
和std::prev(l.end())
之间的std::distance
。我希望这等于l.size()
,因为l.end()
是一个不存在的迭代器,因此不应该在远处考虑。
在代码形式中,为什么:
l.size() != std::distance(l.begin(), std::prev(l.end())
编辑为什么这不是重复项
这个问题与关于区间的问题无关,因为我的问题是关于迭代器distance
的性质,而不是关于l.begin()
和l.end()
区间的性质,尽管是有用和相关的概念。我清楚地表明我使用了prev(l.begin())
并说明了原因。
鉴于问题中的评论,我理解了我的概念错误,我将发布并回答说,不能保证distance()
会给你size()
,因为distance
计数从第一个到最后一个传递的迭代器所需的增量数,而不是给定间隔内的元素数。鉴于该问题被重复数据删除器阻止,我无法回答我认为正确的答案并添加示例。
假设我们有一个大小为 1 的列表。然后l.end()
是[不存在的]第二个元素(索引1),prev(l.end())
是第一个元素(索引0)。然后std::distance(l.begin(), std::prev(l.end()))
是 0,而它应该是 1。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 在 std::list 中,std::d istance(it.begin(), std::p rev(it.end()
- for-each 循环生成错误,但 for(it=begin()...在遍历 std::map 包含 unique_ptr 时不会
- std::map::erase(it++)是否维护一个指向映射中下一个元素的有效迭代器
- std::next with n > std::d istance(it, c.end())