У меня есть проект в C++ 03, у которого есть problem со структурой данных: я использую вектор вместо списка, даже если мне нужно постоянно pop_front-push_back. но пока это нормально, потому что сейчас мне нужно переписать слишком много кода.элемент pop-push из std :: vector и элементы повторного использования
мой подход - это tuo иметь буфер последней точки frame_size, всегда обновляемый. поэтому каждый кадр должен появиться спереди и отбросить назад. (Mayebe есть название для этого подхода?)
так я использую этот код:
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);
я есть готовый к использованию код для объекта пула и поэтому я подумал: это не отличная оптимизация, но я могу хранить фронт в пуле, и поэтому я могу получить время распределения apoint.
ОК это не так полезно, и, вероятно, это не имеет смысла, но я прошу только об образовательном любопытстве: как я могу это сделать?
как я могу хранить память стертого элемента вектора для повторного использования его? этот вопрос имеет смысл? если нет, то почему?
.. потому что Стирание не возвращает стертый вектор, это возвращение:
Случайный итератор доступа, указывающий на новое место элемента , который следовал за последний элемент стерта при вызове функции, которая конец вектора, если операция стирает последний элемент в последовательности .
Если вы постоянно 'pop_front' и не хотите использовать' list', то почему бы не 'std :: deque'? –
проблема в том, что у меня есть много утилит, которые используют std :: vector, поэтому мне нужно открыть репозиторий утилиты, вилки и шаблона (или переписать) все, что принимает вектор, чтобы сделать его пригодным для списка или deque – nkint
Является ли создание Точка тяжеловесным? Вы храните объекты, а не указатели на объекты в векторе. Если вы хотите сохранить объекты в пуле, рекомендуется сохранить их как указатели, а не объекты. – Jagannath