Я был удивлен, обнаружив, что элементы перемещения vector :: erase при вызове erase. Я думал, что он заменит последний элемент «подлежащим удалению» элементом и уменьшит размер на единицу. Моя первая реакция была: «Давайте расширим std :: vector и заменим erase ()». Но я нашел во многих темах, например, «Есть ли реальный риск наследования контейнеров C ++ STL? ", что это может вызвать утечку памяти. Но я не добавляю в вектор никаких новых данных. Таким образом, не нужно освобождать дополнительную память. Есть ли еще риск?
Некоторые предлагают предпочесть композицию наследованию. Я не могу понять этот совет в этом контексте. Зачем мне тратить свое время на «механическую» задачу обертывания каждой функции замечательного в остальном класса std :: vector? Наследование действительно имеет наибольший смысл для этой задачи - или я что-то упускаю?
algorithm
: есть десятки функций, которые изменяют контейнеры. Если вы сделаете это так, как думаете, тогда вы столкнетесь с проблемой N * M. - person Seth Carnegie   schedule 15.04.2012algorithm
не содержит только функции, которые изменяют содержимое контейнеров по диапазонам итераторов. - person dalle   schedule 15.04.2012sort
изменяет не содержимое (фактические элементы), а порядок элементов. - person Seth Carnegie   schedule 15.04.2012algorithm
не могут добавлять или удалять элементы в коллекции, поскольку функции вalgorithm
работают с диапазонами итераторов. Чтобы добавить / удалить элементы в коллекции, вам необходимо использовать правильную функцию-член или вспомогательные классы (например,back_insert_iterator
,front_insert_iterator
иinsert_iterator
) в заголовкеiterator
. - person dalle   schedule 15.04.2012