Std::map::iterator对单个元素进行自减
std::map::iterator decrement on single element
如果映射中只有一个元素,std::map迭代器减量应该返回什么?下面是示例代码
#include <map>
#include <stdio.h>
int main()
{
std::map<int, int> m;
m.insert(std::make_pair(1, 1));
//std::map<int, int>::iterator it = m.begin();
std::map<int, int>::iterator it = m.upper_bound(0);
printf("isbegin: %dn", it == m.begin());
--it;
bool isend = it == m.end();
printf("isend: %dn", isend);
}
在Windows上它将打印isend: 1,在Linux上它将打印isend: 0。
问题是:上面的递减真的是UB的情况吗?如果不是,那么什么结果是正确的- Windows或Linux的一个?
更新:修改代码,显示upper_bound被称为
在begin()之前对元素进行自减是没有意义的。这是未定义的行为,没有正确或错误的答案。
对于迭代器r
,如果在操作完成之前存在s
,使得r == ++s
和操作完成后r
可解引用,则操作--r
有效。(§24.2.6双向的。迭代器)
因为begin()返回的是指向容器第一个元素的迭代器,所以没有元素s
可以被加到r
,所以这是未定义的
相关文章:
- 为什么平均打印数组元素比打印单个对象慢C++?
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 如何在 c++ 中将整个数组初始化为类构造函数中的单个元素
- 删除二叉搜索树 (C++) 中的单个元素
- Leetcode 540 上的运行时错误.排序数组中的单个元素
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 尝试从列表中随机选取单个元素并将其显示为C++
- 如何计算单个元素在向量<float>中所有元素之和中的百分比
- 我如何处理数组的单个元素
- 删除两个相邻的元素并用矢量中的单个元素替换它们
- 是否可以在C STL中获得集合的单个元素
- 从2D数组C 中删除单个元素
- 连续单个元素的敏感变量
- 在动态数组C 中删除单个元素
- 在C++中,如何在没有新元素且不单独声明单个元素的情况下创建"std::initializer_list<base *>"?
- 如何在多维数组中搜索单个行,然后对某些行中的每个单个元素执行计算
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 移动单个矢量元素上的语义
- 如何在单个向量中查找匹配的元素
- 在什么基础上,由单个元素组成的参数包的折叠表达式被转换为未加括号的表达式