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
См. также
| возвращает количество элементов, которое может храниться в выделенной в данный момент памяти (открытая функция-член) |
|
| возвращает максимально возможное количество элементов (открытая функция-член) |
|
| уменьшает использование памяти, освобождая неиспользуемую память (открытая функция-член) |
|
| освобождает зарезервированные блоки и соответствующим образом уменьшает вместимость (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/hive/reserve