чем отличаются алгоритмы удаления и удаления / удаления? - PullRequest
2 голосов
/ 13 июня 2010

В чем разница между алгоритмами remove и remove_if и функцией-членом erase? Приводит ли оба к вызову деструктора удаленных объектов?

Ответы [ 4 ]

7 голосов
/ 13 июня 2010

Нет, remove и remove_if только перемещают объекты в последовательности.Вам нужно вызвать erase, чтобы сделать последовательность на самом деле короче.Возвращаемое значение remove и remove_if - это итератор, который можно использовать в вызове erase для сокращения последовательности:

sequence.erase(remove(...),sequence.end());
6 голосов
/ 13 июня 2010

Нет, std::remove_if переместит элементы, которые не соответствуют предикату, в конец списка и вернет итератор к новому «концу».Erase эффективно удалит элемент (вызовет dtor) из контейнера.

Различие прекрасно иллюстрируется примерами здесь и здесь .

0 голосов
/ 17 июня 2015

Проще говоря, std :: remove использует значение, чтобы определить, нужно ли "удалить" элемент, тогда как std :: remove_if использует функцию предиката.

0 голосов
/ 13 июня 2010

Деструктор всегда будет вызываться при удалении элемента, независимо от того, какой метод / функцию вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...