c++ - std::map::iterator 递减单个元素

标签 c++ visual-c++ gcc stl stdmap

<分区>

如果映射中只有单个元素,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

最佳答案

在 begin() 之前对元素进行递减是没有意义的。这是未定义的行为,没有正确或错误的答案。

关于c++ - std::map::iterator 递减单个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16334988/

相关文章:

无法链接 linker.ld

c++ - 对在 Protocol Buffers 中使用 Message::ParseFromIstream 感到困惑

.net - 将 C 代码编译成 Visual C++ dll?

使用cygwin编译winapi

c - 如何针对内存使用优化 GCC 编译?

c++ - 如何使用参数中传递的初始值而不是更新后的值进行后续计算?

c++ - 即使构建成功,Eclipse c++ Type could not be resolved 错误

指向模板类的非静态成员函数的 C++ 函数指针(类成员)

c++ - '? ?' is getting converted into ' ^' 在 Visual C++ 中。为什么会发生,出路在哪里?

unit-testing - 有 xUnit++ 的文档吗