Сохранение первых N элементов std::vector <> и удаление остальных элементов

У меня есть переменная std::vector<int> в моем приложении C++. Размер вектора определяется во время выполнения, но обычно около 1000.

Я отсортировал этот вектор (который хорошо работает), и после сортировки я хотел бы сохранить только первые 50 элементы.

Я пробовал:

kpts.erase(kpts.begin() + 50, kpts.end());

где kpts - мой вектор, а производительность ужасна! Предположительно из-за способа erase.

Есть ли способ сохранить только первые 50 элементы вектора? Кажется, что это должно быть очевидно, но я не могу найти способ сделать это.

Ответ 1

Да, вы можете использовать std::vector::resize, который просто усекает, если длина вектора больше n.

Смотрите здесь: http://www.cplusplus.com/reference/vector/vector/resize/

std::vector<int> myvector;

for (int i=1;i<1000;i++) myvector.push_back(i);

myvector.resize(50);
// myvector will contain values 1..50