Я с удивлением обнаружил вектор :: erase move elements при вызове erase. Я думал, что он заменит последний элемент элементом «быть удаленным» и уменьшит размер на единицу. Моя первая реакция была: «Давайте продолжим std :: vector и over-ride erase()». Но я нашел во многих потоках, таких как «Is there any real risk to deriving from the C++ STL containers?», что может вызвать утечку памяти. Но я не добавляю ни одного нового элемента данных в вектор. Таким образом, нет дополнительной памяти для освобождения. Есть ли риск?нужен std :: vector with O (1) erase
Некоторые полагают, что мы должны предпочесть композицию над наследованием. Я не могу понять этот совет в этом контексте. Почему я должен тратить свое время на «механическую» задачу обертывания каждой функции замечательного класса std :: vector.? Наследование действительно имеет наибольший смысл для этой задачи - или я чего-то не хватает?
Почему бы просто не написать бесплатную функцию, которая делает то, что вы хотите? –
Не нарушает ли принцип ООП? функции-члены должны иметь ИСКЛЮЧИТЕЛЬНЫЕ права на изменение данных-членов. Конечно, я согласен с тем, что принципы ООП не «отправлены богом», но я ценю необходимость инкапсуляции, чтобы лучше рассуждать о моих программах. –
@AbhishekAnand: Наоборот, чем больше функций-членов у вас есть, тем хуже ваше инкапсуляция. – GManNickG