Первый пример довольно неэффективен. erase
перемещает все элементы за точку стирания вниз, чтобы заполнить пространство, которое создает erase
; этот код заканчивает тем, что копирует все более поздние элементы строки один раз для каждого начального пробела . Второй пример не выполняет то, о чем спрашивает вопрос, потому что оператор break
рано выходит из цикла. Но подход во втором намного лучше. В общем, если вы звоните erase
более одного раза, вы, вероятно, ошиблись. Гораздо лучше найти первого персонажа, которого вы хотите сохранить, и , а затем удалите все символы перед ним. Итак:
std::string::size_type pos = str.find_first_not_of(' ');
if (pos != std::string::npos)
str.erase(0, pos);