Я заметил, что когда в этом коде выполняется оператор else if
, destination
, несмотря на то, что он не является разыменованным, представляется интерпретированным как фактическое значение, на которое он указывает вместо итератора. Это похоже на то, что он автоматически разыгрывается. Цикл for
выполняется так, как вы ожидали, но идентификатор, например done
, должен быть установлен на true
, когда итераторы begin()
и end()
равны. destinations
- это дека целых чисел, глобальных для этой функции.Итератор автоматически разыменовывается при указании на целое число
void removeDestination(int destinationFloor)
{
bool done = false;
while(!done && !destinations.empty())
{
for (auto destination = destinations.begin(); destination != destinations.end(); ++destination)
{
if(*destination == destinationFloor)
{
destinations.erase(destination);
break;
}
else if(destination == destinations.end())
{
done = true;
}
}
}
}
Спасибо за помощь.
Какое поведение вашей программы заставило вас думать, что итератор был разыменован там? Это странный вывод. – user2357112
@ user2357112, когда выполняется оператор 'else if', он сравнивает элемент, на который указывает' destination', с итератором 'end()', поэтому этот код создает бесконечный цикл. Я согласен, что это странно, но я заметил в отладчике, наблюдая изменения локальных значений в этой функции. – LBaelish