🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Абстрактная фабрика
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Прототип
        • Реализации на С++
        • Реализации на Kotlin
        • Реализации на Java
        • Возможные реализации для решения конкретных задач на С++
      • Строитель
        • Реализации на С++
        • Реализации на Kotlin
      • Одиночка
        • Реализации на C++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Пул объектов
        • Реализации на С++
    • Структурные паттерны
      • Адаптер
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач
      • Декоратор
        • Реализации на С++
        • Реализации на Kotlin
      • Компоновщик
        • Реализации на С++
      • Мост
        • Реализации на С++
      • Заместитель
        • Реализации на С++
        • Реализации на Kotlin
      • Фасад
        • Реализации на С++
      • Приспособленец
        • Реализации на С++
    • Поведенческие паттерны
      • Стратегия
        • Реализации на С++
        • Реализации на Kotlin
      • Команда
        • Реализации на С++
        • Реализации на Kotlin
      • Цепочка обязанностей
        • Реализации на С++
        • Реализации на Kotlin
      • Подписчик-издатель
        • Реализации на С++
        • Реализации на Kotlin
      • Посетитель
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
      • Посредник
        • Реализации на С++
        • Реализации на Kotlin
      • Шаблонный метод
        • Реализации на С++
      • Опекун
        • Реализации на С++
      • Итератор
        • Реализации на С++
        • Реализации на Kotlin
      • Свойство
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
  • Введение в идиомы
  • Идиомы
    • Оглавление
    • RAII
    • Type erasure
      • Контейнеры с type erasure
    • CRTP
    • Статический полиморфизм
    • Shrink to fit
    • Proxy
    • Erase remove
    • Decltype (auto)
    • Copy and swap
    • Safe bool
    • Scope guard
    • Addressof
Powered by GitBook
On this page
  • Назначение
  • Решаемые задачи
  • Примеры реализации идиомы Shrink to fit

Was this helpful?

  1. Идиомы

Shrink to fit

Назначение

Идиома Shrink to fit решает проблему избыточного использования памяти при работе с контейнерами.

Реализация заключается в создании или вызове метода shrink_to_fit(), который принудительно уменьшает выделенную память до минимально возможного размера, необходимого для хранения содержимого контейнерами.

Решаемые задачи

  • экономия ресурсов памяти

  • уменьшение нагрузки на систему

Примеры реализации идиомы Shrink to fit

Первый способ

std::vector<int> v;
// v заменяется его временной копией, которая является оптимальной по емкости
std::vector<int>(v.begin(), v.end()).swap(v);

Второй способ

int main() 
{
    std::vector<int> vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    for (auto it = vec.begin(); it != vec.end(); ) 
    {
        it = vec.erase(it);
        if (it != vec.end()) 
            ++it;
    }
    vec.shrink_to_fit(); // Уменьшаем выделенную память до минимально возможного размера    
    std::cout << "Size: " << vec.size() << std::endl;
    std::cout << "Capacity: " << vec.capacity() << std::endl;
    return 0;
}

В C++11 некоторые контейнеры (такие как vector, deque, basic_string) объявляют идиому "Shrink to fit", как функцию shrink_to_fit().

shrink_to_fit() - это необязательный запрос на уменьшение capacity() до size()

PreviousСтатический полиморфизмNextProxy

Last updated 1 year ago

Was this helpful?