Я читал здесь, в StackOveflow и других источниках, что поведение функции удаления просто переупорядочивает исходный контейнер, так что элементы, которые должны быть удалены, перемещаются в конец контейнера и НЕ удаляются.Они остаются частью контейнера, а функция remove () просто возвращает итератор, который определяет конец диапазона элементов для сохранения.
Так что, если вы никогда не обрежете часть контейнера, имеющую значениякоторые были «удалены», они все равно должны присутствовать.
Но когда я запускаю приведенный ниже код, после алфавитно-цифровых символов, которые не были «удалены», нет пробелов.
int main()
{
std::string test "this is a test string with a bunch of spaces to remove";
remove(test.begin(), test.end(), ' ');
std::cout << test << std::endl;
return 0;
}
Что здесь происходит?Видя, что я никогда не вызываю test.erase (), разве в моей строке не должно быть концевых пробелов?Гарантируется ли, что «удаленные» элементы все еще будут присутствовать после вызова remove ()?
PS. Я не ищу предложений о том, как наилучшим образом удалить пробелы из строки, приведенное выше является просто иллюстративнымпример поведения remove (), которое меня смущает.