Евгений Шатунов, кажется догадался. Да, косячок вышел. Цикл развернёт конейнер в итераторы, а размер контейнера изменится во время работы. Окай =) Но с учётом break всё будет работать как нужно. Это может только сломаться, если убрать break с целью удалить все пробелы (если они будут).
Egorithm, break делся туда, куда он девается при чтении таким образом отформатированного кода. Он из кода выпал.
Плюс, человек без знания стандартной библиотеки может подумать что раз с ним работает, то и без него тоже.
Ну и еще, уже чисто от меня, если break оставлять, то лучше переписать так.
В этом плане твой первый пример тоже бросит исключение если пробела в строке не нашлось. К тому же, в общем смысле подстроку искать сравнительно тяжелее по производительности, чем символ.
По исключению - верно. Там дело будет в инвалидации итераторов после erase.