Рассмотрим следующий код (взят из cppreference.com , слегка адаптирован):
#include <algorithm>
#include <string>
#include <iostream>
#include <cctype>
int main()
{
std::string str1 = " Text with some spaces";
str1.erase(std::remove(str1.begin(), str1.end(), ' '), str1.end());
std::cout << str1 << '\n';
return 0;
}
Почему второй параметр erase
необходим? (Т.е. str1.end()
в данном случае.)
Почему я не могу просто указать итераторы, которые возвращаются remove
в erase
? Почему я должен сказать ему также о последнем элементе контейнера, из которого нужно стереть?
Подводный камень в том, что вы также можете вызвать erase
без второго параметра, но это, очевидно, дает неверный результат.
Есть ли случаи, когда я не хотел бы передавать конец контейнера в качестве второго параметра в erase
?
Опускание второго параметра erase
для идиомы erase-remove всегда является ошибкой или это может быть правильным решением?