РЕДАКТИРОВАТЬ: Я идиот. Я упустил тот факт, что это список копирования при записи, поэтому каждое удаление означает новую копию . Так что мои предложения ниже, вероятно, будут неоптимальными, если существует более одного удаления.
То же, что и для любого другого списка, чей итератор не поддерживает удаление или что-либо, где вы не используете итератор. Чтобы избежать этой ошибки, на ум приходит три основных метода:
Уменьшите индекс после удаления чего-либо (будьте осторожны, чтобы ничего не делать с индексом до следующей итерации). Для этого вам, очевидно, придется использовать цикл for в стиле for(int i=0; i <
..., чтобы вы могли манипулировать индексом.
Как-то повторить, что делает внутренняя часть цикла, не возвращаясь буквально к вершине цикла. Немного хака - я бы избежал этой техники.
Перебирать список в обратном порядке (от конца к началу, а не от начала к концу). Я предпочитаю этот подход, так как он самый простой.