如果地图中只有单个元素,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: %d\n", it == m.begin());
--it;
bool isend = it == m.end();
printf("isend: %d\n", isend);
}
在 Windows 上它将打印 isend: 1,在带有 g++ 4.6 的 Linux 上它将打印 isend: 0。
问题:上面的减量真的是UB的情况吗?如果不是,那么什么结果是正确的 - Windows 或 Linux 一个?
更新:修改代码以显示调用了upper_bound