C++ C++;11:map::下限不';无法在Linux中对2个或更少的元素正常工作
如果我在Linux中运行以下C++11示例(Debian7、GCC4.8.2、EclipseCDT),while循环是无限的。第一个循环是正确的。迭代器递减1,它引用第一个映射元素。但第二个循环和其他循环是不正确的。递减运算符不递减迭代器。它仍然引用第一个元素。 如果我删除注释(在映射初始化中),而循环将停止。 你能告诉我,我做错了什么吗? 非常感谢你的每一个评论C++ C++;11:map::下限不';无法在Linux中对2个或更少的元素正常工作,c++,linux,gcc,c++11,debian,C++,Linux,Gcc,C++11,Debian,如果我在Linux中运行以下C++11示例(Debian7、GCC4.8.2、EclipseCDT),while循环是无限的。第一个循环是正确的。迭代器递减1,它引用第一个映射元素。但第二个循环和其他循环是不正确的。递减运算符不递减迭代器。它仍然引用第一个元素。 如果我删除注释(在映射初始化中),而循环将停止。 你能告诉我,我做错了什么吗? 非常感谢你的每一个评论 #include <iostream> #include <map> using namespace std
#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;
}
#包括
#包括
使用名称空间std;
int main(){
map mymap={{1100},{2200}/*,{3300}/};
auto it=mymap.下限(2);
是否将begin()
迭代器传递到此行:
while(--it != buff.end())
而--begin()
会产生未定义的行为。--begin()是未定义的行为。请阅读您为什么要尝试到达映射的末尾(),以减少while循环中的迭代器?这样会发现一些错误