Spec-Zone.ru › C++

std::hive<T,Allocator>::reserve

void reserve( size_type new_cap );
(начиная с C++26)

Увеличивает вместимость hive (общее количество элементов, которое может содержать hive без необходимости перераспределения памяти) до значения, большего или равного new_cap. Если new_cap больше текущей capacity(), выделяются зарезервированные блоки; в противном случае функция ничего не делает.

reserve() не изменяет размер hive.

После вызова reserve() условие capacity() >= new_cap выполняется.

Все итераторы (включая итератор end()), указатели и ссылки на элементы контейнера остаются действительными.

Параметры

new_cap - новая вместимость hive, в количестве элементов

Исключения

  • std::length_error, если new_cap >= max_size.
  • Любое исключение, выброшенное Allocator::allocate() (обычно std::bad_alloc).

Сложность

Линейная относительно количества выделенных зарезервированных блоков.

Примечания

reserve() нельзя использовать для уменьшения вместимости контейнера; для этого предусмотрены shrink_to_fit() и trim_capacity().

Пример

#include <hive>
#include <print>

int main()
{
    constexpr int max_elements = 1'000;

    std::println("Using reserve:");
    {
        std::hive<int> h;
        h.reserve(max_elements);

        for (int n{}; n != max_elements; ++n)
            h.insert(n);

        std::println("size(): {}, capacity(): {}", h.size(), h.capacity());
    }

    std::println("Not using reserve:");
    {
        std::hive<int> h;

        for (int n{}; n != max_elements; ++n)
        {
            if (h.size() == h.capacity())
                std::println("size() == capacity() == {}", h.size());
            h.insert(n);
        }

        std::println("size(): {}, capacity(): {}", h.size(), h.capacity());
    }
}

Возможный вывод:

Using reserve:
size(): 1000, capacity(): 1000
Not using reserve:
size() == capacity() == 0
size() == capacity() == 76
size() == capacity() == 152
size() == capacity() == 304
size() == capacity() == 559
size() == capacity() == 814
size(): 1000, capacity(): 1069

См. также

capacity
возвращает количество элементов, которое может храниться в выделенной в данный момент памяти
(открытая функция-член)
max_size
возвращает максимально возможное количество элементов
(открытая функция-член)
shrink_to_fit
уменьшает использование памяти, освобождая неиспользуемую память
(открытая функция-член)
trim_capacity
освобождает зарезервированные блоки и соответствующим образом уменьшает вместимость
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/hive/reserve

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API