Должен ли я использовать стирание-удаление идиома здесь?

у меня есть std::vector<IRenderable*> (_pBkBuffer в коде ниже). Он содержит ряд статических объектов (в начале вектора), которые не изменяются, за которыми следует переменное количество динамических объектов.

// erase-remove, but leave the static renderables intact
_pBkBuffer->erase(
std::remove(
_pBkBuffer->begin() + _nStatics, _pBkBuffer->end(), ???
),
_pBkBuffer->end()
);

Что я могу поставить на ??? для того, чтобы стереть-удалить нестатические визуализаторы?

Я знаю что ??? должен соответствовать всем объектам в указанном подмножестве.

Должен ли я использовать erase-remove вообще, или я должен использовать другой подход?

2

Решение

‘Должен ли я использовать erase-remove вообще

Видимо, вы уже знаете, где находится объект, так что нет. Ты делаешь это:

_pBkBuffer->erase( _pBkBuffer->begin() + _nStatics, _pBkBuffer->end() );

или даже лучше:

_pkBuffer->resize( _nStatics );

Идиома удаления стирания будет использоваться, если они разбросаны случайным образом в векторе. Чего не хватает вместо ??? это значение, с которым сравниваются удаляемые элементы. Поскольку вы храните указатели, вам, скорее всего, потребуется предоставить пользовательский предикат (указатель на функцию, функтор или лямбду) и использовать remove_if вместо.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector