Подтвердить что ты не робот

Удалите первые N элементов из std::vector

Кажется, я не думаю о надежном способе (который также сжимает память), чтобы удалить первые N элементов из std::vector. Как можно это сделать?

4b9b3361

Ответ 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() );

Не забудьте проверить размер, на всякий случай.