如果我在 Linux(Debian 7、GCC 4.8.2、Eclipse CDT)中运行以下 C++11 示例,则 while 循环是无限的。第一个循环是正确的。迭代器减 1,它引用第一个 map 元素。但是第二个和其他循环是不正确的。递减运算符不会递减迭代器。它仍然引用第一个元素。 如果我删除评论(在 map 初始化中),while 循环将停止。 你能告诉我,我做错了什么吗? 非常感谢您的每一条评论。
#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()
产生未定义的行为。
关于C++11:map::lower_bound 在 Linux 中对于 2 个或更少的元素不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22864160/