std::hive
| Определён в заголовке <hive>
|
||
template<
class T,
class Allocator = std::allocator<T>
> class hive;
|
(1) | (начиная с C++26) |
namespace pmr {
template<class T>
using hive = std::hive<T, std::pmr::polymorphic_allocator<T>>;
}
|
(2) | (начиная с C++26) |
std::hive — это последовательный контейнер, который обеспечивает вставку и удаление за постоянное время.hive автоматически управляет своей памятью в нескольких блоках памяти (блоки элементов). Позиция вставки не определена, поэтому контейнер может повторно использовать память удалённых элементов.
Когда активные блоки (блоки элементов, содержащие элементы) становятся пустыми, они могут быть либо освобождены, либо стать зарезервированными блоками.
Зарезервированные блоки становятся активными, когда используются повторно для хранения элементов. Пользователь может создавать дополнительные зарезервированные блоки, вызывая reserve().
Удаление и итерация имеют сложность O(1).
Ёмкость каждого активного блока увеличивается с определённым реализацией коэффициентом (например, на 1.69). Как пользователи, так и реализации могут ограничивать минимальную и максимальную ёмкость блоков элементов.
Тип std::hive соответствует требованиям Container, за исключением операторов == и !=. Тип std::hive также удовлетворяет требованиям ReversibleContainer, AllocatorAwareContainer и некоторым требованиям SequenceContainer.
| Этот раздел не завершён Причина: описание итераторов |
Параметры шаблона
| T | - | Тип элементов.
| ||
| Allocator | - | Аллокатор, используемый для получения/освобождения памяти и конструирования/уничтожения элементов в этой памяти. Тип должен соответствовать требованиям Allocator. Программа считается некорректной, если Allocator::value_type не является тем же типом, что и T.
|
Типы-члены
| Тип-член | Определение |
value_type
|
T
|
allocator_type
|
Allocator
|
pointer
|
std::allocator_traits<Allocator>::pointer
|
const_pointer
|
std::allocator_traits<Allocator>::const_pointer
|
reference
|
value_type&
|
const_reference
|
const value_type&
|
size_type
|
определяемый реализацией |
difference_type
|
определяемый реализацией |
iterator
|
определяемый реализацией LegacyBidirectionalIterator по value_type
|
const_iterator
|
определяемый реализацией LegacyBidirectionalIterator по const value_type
|
reverse_iterator
|
std::reverse_iterator<iterator>
|
const_reverse_iterator
|
std::reverse_iterator<const_iterator>
|
Элементы данных
| Элемент | Описание |
hive_limits current-limits (закрытый)
|
текущие ограничения ёмкости блока (объект-член для демонстрации*) |
Функции-члены
создаёт объект hive (public функция-член) | |
уничтожает объект hive (public функция-член) | |
| присваивает значения контейнеру (public функция-член) | |
| присваивает значения контейнеру (public функция-член) | |
| присваивает диапазон значений контейнеру (public функция-член) | |
| возвращает связанный аллокатор (public функция-член) | |
Итераторы | |
| возвращает итератор на начало (public функция-член) | |
| возвращает итератор на конец (public функция-член) | |
| возвращает обратный итератор на начало (public функция-член) | |
| возвращает обратный итератор на конец (public функция-член) | |
Вместимость | |
| проверяет, пуст ли контейнер (public функция-член) | |
| возвращает количество элементов (public функция-член) | |
| возвращает максимально возможное количество элементов (public функция-член) | |
| возвращает количество элементов, которое может быть размещено в текущей выделенной памяти (public функция-член) | |
| резервирует память (public функция-член) | |
| уменьшает использование памяти за счёт освобождения неиспользуемой памяти (public функция-член) | |
| освобождает зарезервированные блоки и уменьшает ёмкость соответственно (public функция-член) | |
| возвращает текущие ограничения ёмкости блока (public функция-член) | |
| возвращает ограничения ёмкости блока по умолчанию (public функция-член) | |
| возвращает жёсткие ограничения ёмкости блока (public функция-член) | |
| проверяет, соответствуют ли заданные ограничения ёмкости требованиям (public функция-член) | |
| перераспределяет активные блоки так, чтобы они находились в пределах ограничений блока (public функция-член) |
Модификаторы | |
| создаёт элемент на месте (public функция-член) | |
| создаёт элементы на месте с подсказкой (public функция-член) | |
| вставляет элементы (public функция-член) | |
| вставляет диапазон элементов (public функция-член) | |
| удаляет элементы (public функция-член) | |
| обменивает содержимое (public функция-член) | |
| очищает содержимое (public функция-член) | |
Операции | |
перемещает элементы из другого контейнера hive (public функция-член) | |
| удаляет последовательные повторяющиеся элементы (public функция-член) | |
| сортирует элементы (public функция-член) | |
| возвращает итератор, указывающий на тот же элемент, что и заданный указатель (public функция-член) | |
Внешние функции
(C++26) |
специализирует алгоритм std::swap (шаблон функции) |
| удаляет все элементы, удовлетворяющие определённым критериям (шаблон функции) |
Руководства по выводу типов |
(начиная с C++26) |
Вспомогательные классы
(C++26) |
информация о расположении ограничений ёмкости блока в std::hive (класс) |
Примечания
| Макрос проверки возможностей | Значение | Std | Возможность |
|---|---|---|---|
__cpp_lib_hive |
202502L |
(C++26) | std::hive
|
Пример
| Этот раздел не завершён Причина: нет примера |
См. также
| двусвязный список (шаблон класса) | |
(C++11) |
односвязный список (шаблон класса) |
Внешние ссылки
| 1. | plf::hive — эталонная реализация на github.com
|
| 2. | Пчелиный улей на Wikipedia.com |