Кажется, я не думаю о надежном способе (который также сжимает память), чтобы удалить первые N элементов из std::vector. Как можно это сделать?
Удалите первые N элементов из std::vector
Ответ 1
Поскольку вы упоминаете, что хотите компактную память, лучше всего скопировать все на новый вектор и использовать икону подкачки.
std::vector<decltype(myvector)::value_type>(myvector.begin()+N, myvector.end()).swap(myvector);
Ответ 2
Используйте метод .erase()
:
// Remove the first N elements, and shift everything else down by N indices
myvec.erase(myvec.begin(), myvec.begin() + N);
Это потребует копирования всех элементов из индексов N + 1 в конец. Если у вас большой вектор и будет делать это часто, используйте вместо него std::deque
, который имеет более эффективную реализацию удаления элементов с фронта.
Ответ 3
v.erase( v.begin(), v.size() > N ? v.begin() + N : v.end() );
Не забудьте проверить размер, на всякий случай.