у меня есть 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 вообще, или я должен использовать другой подход?
‘Должен ли я использовать erase-remove вообще
Видимо, вы уже знаете, где находится объект, так что нет. Ты делаешь это:
_pBkBuffer->erase( _pBkBuffer->begin() + _nStatics, _pBkBuffer->end() );
или даже лучше:
_pkBuffer->resize( _nStatics );
Идиома удаления стирания будет использоваться, если они разбросаны случайным образом в векторе. Чего не хватает вместо ???
это значение, с которым сравниваются удаляемые элементы. Поскольку вы храните указатели, вам, скорее всего, потребуется предоставить пользовательский предикат (указатель на функцию, функтор или лямбду) и использовать remove_if
вместо.
Других решений пока нет …