Я долго пользовался приведенным ниже способом - не уверен насчет его сложности.
s.erase(std::unique(s.begin(),s.end(),[](char s,char f){return (f==' '||s==' ');}),s.end());
когда вы хотите удалить персонажа ' '
, а некоторые например -
использовать
s.erase(std::unique(s.begin(),s.end(),[](char s,char f){return ((f==' '||s==' ')||(f=='-'||s=='-'));}),s.end());
аналогично просто увеличьте ||
, если количество символов, которое вы хотите удалить, не равно 1
но, как уже упоминалось, идиома удаления стирания тоже выглядит хорошо.