у меня есть проект на С++ 03, у которого есть проблема со структурой данных: я использую вектор вместо списка, даже если мне приходится постоянно делать push_front-push_back. но пока все в порядке, потому что мне нужно переписать слишком много кода.
мой подход заключается в том, чтобы буфер последней точки frame_size всегда обновлялся. поэтому в каждом кадре я должен выдвигаться вперед и отталкиваться назад. (может быть, есть название для этого подхода?)
поэтому я использую этот код:
Point apoint; // allocate new point
apoint.x = xx;
apoint.y = yy;
int size = points.size()
if (size > frame_size) {
this->points.erase( points.begin() ); // pop_front
}
this->points.push_back(apoint);
у меня есть готовый к использованию код для пула объектов, и я подумал: это не очень хорошая оптимизация, но я могу сохранить фронт в пуле, и поэтому я могу выиграть время выделения точки.
хорошо, это не так полезно и, вероятно, не имеет смысла, но я спрашиваю только из образовательного любопытства: как я могу это сделать?
как я могу сохранить память стертого элемента вектора для его повторного использования? этот вопрос имеет смысл? если нет, то почему?
.. поскольку стирание не возвращает стертый вектор, оно возвращает:
Итератор произвольного доступа, указывающий на новое расположение элемента, следующего за последним элементом, стертым вызовом функции, который является концом вектора, если операция стерла последний элемент в последовательности.
pop_front
и не хотите использоватьlist
, то почему бы иstd::deque
? - person Sebastian Mach   schedule 27.02.2012push_back()
сразу послеerase()
, то для нового объекта уже выделена память. Вектор не уменьшает емкость, когда вы стираете ее. Однако объект не будет построен в одном и том же месте, но, вероятно, это не главное, верно? - person jrok   schedule 27.02.2012