C++11 : map::lower_bound 在 Linux 中无法正常工作 2 个或更少的元素

C++11 : map::lower_bound doesn't work correctly for 2 or less elements in Linux

本文关键字:工作 元素 bound lower map Linux C++11 常工作      更新时间:2023-10-16

如果我在Linux(Debian 7,GCC 4.8.2,Eclipse CDT)中运行以下C++11示例,则while循环是无限的。第一个循环是正确的。迭代器递减 1,并引用第一个映射元素。但是第二个和其他循环是不正确的。递减运算符不会递减迭代器。它仍然引用第一个元素。如果我删除注释(在地图初始化中),而循环将停止。你能告诉我,我做错了什么吗?非常感谢您的每条评论。

#include <iostream>
#include <map>
using namespace std;
int main() {
    std::map<int, int> mymap = {{1, 100}, {2, 200}/*, {3, 300}*/};
    auto it = mymap.lower_bound(2);
    cout << "mymap key: " << it->first << endl;
    while(--it != buff.end())
        cout << "mymap key: " << it->first << endl;
    return 0;
}

注意:此代码在Windows平台(Visual Studio 2013 Express)下工作正常。

您将begin()迭代器传递给以下行:

while(--it != buff.end())

--begin()会产生未定义的行为。