Помните, что существуют различные типы контейнеров: смежные против узловых и последовательные против ассоциативных.
Контейнеры на основе узлов позволяют эффективно стирать / вставлять.Последовательные контейнеры упорядочивают элементы по порядку вставки (то есть по положению), а ассоциативные контейнеры упорядочивают их по значению (ключу).
Все текущие ассоциативные контейнеры (map / set / unordered) основаны на узлах, и с ними вы можетестереть элементы напрямую, и вы должны напрямую использовать элемент-элемент erase
.Списки являются контейнерами последовательностей на основе узлов, поэтому вы можете эффективно удалять отдельные элементы, но поиск элемента по значению занимает линейное время, поэтому списки предлагают функцию члена remove
.Только контейнеры последовательности (vector и deque) не имеют простого способа стереть элементы по значению, и вот тут появляется бесплатный алгоритм remove
, который сначала переставляет последовательность, чтобы затем разрешить члену контейнера erase
для эффективного удаления в конце контейнера.
В отличие от многих общих аспектов стандартной библиотеки, которые работают без знания базового контейнера, идиома копирования / стирания является одной из тех вещей, которые требуютнемного подробных знаний о различиях между контейнерами.