В чем разница между erase()
и remove()
?Почему std :: whatever :: erase() метод и std :: remove() автономная функция?
std::whatever::erase
- принимает итераторы диапазона (первый-последний) и соответствует всем элементам.std::remove
- принимает итераторы диапазона (первый-последний) и значение, соответствующее удалению.
Помимо этого, похоже, что они делают то же самое. то есть фактическое «стирание» или «удаление» одинаково в обоих случаях (если только я не ошибаюсь). Итак, почему один из них - метод (вектор, множество, карта и т. Д.), А другой - свободно плавающая функция?
Примечания:
- Да, я знаю, есть также
erase()
, который принимает один итератор, но точно так же могут оказыватьstd::remove()
с той же семантикой.
Это хорошо объясняется на [Erase/Удалить Idiom] (http://en.wikipedia.org/wiki/Erase%E2%80%93remove_idiom) на wikipedia. – Borgleader