Я просто опущу несколько строк вашего кода, чтобы показать, в чем проблема:
for(iter = begin(); iter != end(); iter++) // ***
{
if(iter->arrivalTime == 0)
{
iter++; // ***
}
}
В двух строках, помеченных ***, вы увеличиваете итератор. Проблема в том, что во второй из двух строк вы не проверяете, не дошли ли вы до конца контейнера. Фактически, если вы попадаете во внутренний цикл, вы увеличиваете его в два раза, а проверяете, можете ли вы увеличить его один раз.
Одно из решений - проверить, находитесь ли вы на end()
, прежде чем делать второй шаг, но мне кажется, что вы пытаетесь выполнить ту же операцию, что и я в мой вопрос некоторое время назад делать с фильтрацией элементов из контейнера (карта в этом случае, но то же самое относится к большинству контейнеров STL).