РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
217 of 815 menu

Метод shrink_to_fit

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

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

Синтаксис

vec.shrink_to_fit()

Пример

Давайте создадим вектор, добавим в него элементы, а затем посмотрим на его размер и емкость:

#include <iostream> #include <vector> using namespace std; int main() { vector<int> vec; for (int i = 1; i <= 100; i++) { vec.push_back(i); } cout << "size: " << vec.size() << endl; cout << "capacity: " << vec.capacity() << endl; return 0; }

Результат выполнения кода:

"size: 100" "capacity: 128"

Пример

Как видно из предыдущего примера, емкость вектора больше его размера. Давайте вызовем метод shrink_to_fit, чтобы освободить лишнюю память:

#include <iostream> #include <vector> using namespace std; int main() { vector<int> vec; for (int i = 1; i <= 100; i++) { vec.push_back(i); } cout << "before:" << endl; cout << "size: " << vec.size() << endl; cout << "capacity: " << vec.capacity() << endl; vec.shrink_to_fit(); cout << "after:" << endl; cout << "size: " << vec.size() << endl; cout << "capacity: " << vec.capacity() << endl; return 0; }

Результат выполнения кода:

"before:" "size: 100" "capacity: 128" "after:" "size: 100" "capacity: 100"

Пример

Метод shrink_to_fit особенно полезен после удаления большого количества элементов из вектора. Давайте удалим часть элементов и освободим память:

#include <iostream> #include <vector> using namespace std; int main() { vector<int> vec = {1, 2, 3, 4, 5}; vec.reserve(1000); vec.resize(3); cout << "before:" << endl; cout << "size: " << vec.size() << endl; cout << "capacity: " << vec.capacity() << endl; vec.shrink_to_fit(); cout << "after:" << endl; cout << "size: " << vec.size() << endl; cout << "capacity: " << vec.capacity() << endl; for (int x : vec) { cout << x << " "; } cout << endl; return 0; }

Результат выполнения кода:

"before:" "size: 3" "capacity: 1000" "after:" "size: 3" "capacity: 3" 1 2 3

Смотрите также

  • метод capacity,
    который возвращает емкость вектора
  • метод reserve,
    который резервирует память под вектор
  • метод size,
    который возвращает размер вектора
  • метод resize,
    который изменяет размер вектора
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить