C ++ 11: map :: lower_bound не работает правильно для 2 или менее элементов в Linux

0

Если я запускаю следующий пример С++ 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).

  • 0
    --begin () - неопределенное поведение. Пожалуйста, прочитайте stackoverflow.com/questions/19417171/…
  • 2
    почему вы пытаетесь достичь end () карты, уменьшая итератор в цикле while? Таинственные вещи, которые вы найдете таким образом
Теги:
c++11
gcc
debian

1 ответ

1
Лучший ответ

Вы передаете итератору begin() в эту строку:

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

И --begin() дает неопределенное поведение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню