Как уменьшить размер вектора при удалении из него элементов?

Я пишу программу, память которой ограничена в зависимости от размера ввода. Скажем, входной размер равен 1000, затем я сохраняю их в векторе размером 1000. Позже, когда я обрабатываю данные в этом векторе, каждый раз, когда элемент обрабатывается, я помещаю его во второй вектор и использую vector.erase, чтобы удалить его из исходного вектора. Поэтому я подумал, что всегда использую 1000 единиц памяти, потому что в этих двух векторах всегда хранится 1000 элементов.

Но я ошибаюсь, оказывается, я использовал 2000 памяти, потому что erase не уменьшает размер вектора, когда элементы удалены … Я думаю, это то же самое для splice это?

Так есть ли способ заставить мою программу использовать только 1000 памяти? Я могу решить эту проблему, добавив атрибут и отметив, обработан ли элемент, но я чувствую, что это не лучший способ. Спасибо!

3

Решение

Этот метод, позволяющий уменьшить емкость, можно использовать как в C ++ 03, так и в C ++ 11:

std::vector<int> v;
// ...
std::vector<int>(v.begin(), v.end()).swap(v);

это живой пример содержит демонстрацию. Эффективность метода зависит от того, сколько памяти выделяет реализация при инициализации временного вектора с элементами v,

В C ++ 11 функция-член shrink_to_fit() Может быть вызван для выполнения необязательного запроса, чтобы уменьшить емкость вектора до размера, необходимого для хранения элементов, находящихся в данный момент в контейнере.

Заметить, что «необязательного«означает, что стандарт не требует реализации для фактического удовлетворения этого запроса.

4

Другие решения

C++11 добавил функцию shrink_to_fit() в std::vector, Если вы ищете способ уменьшить размер вектора, после удаления элементов из него, это будет путь. Вот больше информации об этом.

0

По вопросам рекламы [email protected]