Если я запускаю следующий пример С++ 11 в Linux (Debian 7, GCC 4.8.2, Eclipse CDT), цикл while бесконечен. Первый цикл правильный. Итератор уменьшается на 1 и ссылается на первый элемент карты. Но вторая и другая циклы неверны. Оператор Decrement не уменьшает итератор. Он по-прежнему ссылается на первый элемент. Если я удалю комментарий (в инициализации карты), пока цикл остановится. Не могли бы вы рассказать мне, что я сделал не так? Большое спасибо за каждый комментарий.
#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()
дает неопределенное поведение.