std::vector<bool>
Определено в заголовочном файле <vector> | ||
|---|---|---|
template<
class Allocator
> class vector<bool, Allocator>;
|
std::vector<bool> — это, возможно, более эффективный по использованию памяти специализированный вариант std::vector для типа bool.
Способ, которым std::vector<bool> оптимизируется по памяти (а также оптимизируется ли он вообще), зависит от реализации. Одна из потенциальных оптимизаций заключается в объединении элементов вектора таким образом, чтобы каждый элемент занимал один бит вместо sizeof(bool) байтов.
std::vector<bool> ведет себя аналогично std::vector, но для повышения эффективности использования памяти:
- Не обязательно хранит свои элементы в виде непрерывного массива.
- Представляет класс
std::vector<bool>::referenceкак способ доступа к отдельным битам. В частности, объекты этого класса возвращаются методомoperator[]по значению. - Не использует
std::allocator_traits::constructдля построения значений битов. - Не гарантирует, что разные элементы в одном контейнере могут быть изменены одновременно разными потоками.
Типы членов
| Тип члена | Определение | ||||
|---|---|---|---|---|---|
value_type | bool | ||||
allocator_type | Allocator |
||||
size_type | Зависит от реализации | ||||
difference_type | Зависит от реализации | ||||
| Класс-прокси, представляющий ссылку на один bool (класс) |
|||||
const_reference | bool | ||||
pointer | Зависит от реализации | ||||
const_pointer | Зависит от реализации | ||||
iterator |
|
||||
const_iterator |
|
||||
reverse_iterator | std::reverse_iterator<iterator> | ||||
const_reverse_iterator | std::reverse_iterator<const_iterator> |
Члены-функции
создаёт vector (публичный метод класса std::vector<T,Allocator>) |
|
уничтожает vector (публичный метод класса std::vector<T,Allocator>) |
|
| присваивает значения контейнеру (публичный метод класса std::vector<T,Allocator>) |
|
| присваивает значения контейнеру (публичный метод класса std::vector<T,Allocator>) |
|
| возвращает связанный аллокатор (публичный метод класса std::vector<T,Allocator>) |
|
Доступ к элементам |
|
| доступ к элементу с проверкой границ (публичный метод класса std::vector<T,Allocator>) |
|
| доступ к элементу (публичный метод класса std::vector<T,Allocator>) |
|
| доступ к первому элементу (публичный метод класса std::vector<T,Allocator>) |
|
| доступ к последнему элементу (публичный метод класса std::vector<T,Allocator>) |
|
Итераторы |
|
|
(C++11) | возвращает итератор к началу (публичный метод класса std::vector<T,Allocator>) |
|
(C++11) | возвращает итератор к концу (публичный метод класса std::vector<T,Allocator>) |
|
(C++11) | возвращает обратный итератор к началу (публичный метод класса std::vector<T,Allocator>) |
|
(C++11) | возвращает обратный итератор к концу (публичный метод класса std::vector<T,Allocator>) |
Ёмкость |
|
| проверяет, пуст ли контейнер (публичный метод класса std::vector<T,Allocator>) |
|
| возвращает количество элементов (публичный метод класса std::vector<T,Allocator>) |
|
| возвращает максимальное возможное количество элементов (публичный метод класса std::vector<T,Allocator>) |
|
| резервирует память (публичный метод класса std::vector<T,Allocator>) |
|
| возвращает количество элементов, которое может быть размещено в текущем выделенном пространстве (публичный метод класса std::vector<T,Allocator>) |
|
Модификаторы |
|
| очищает содержимое (публичный метод класса std::vector<T,Allocator>) |
|
| вставляет элементы (публичный метод класса std::vector<T,Allocator>) |
|
|
(C++11) | создаёт элемент на месте (публичный метод класса std::vector<T,Allocator>) |
| удаляет элементы (публичный метод класса std::vector<T,Allocator>) |
|
| добавляет элемент в конец (публичный метод класса std::vector<T,Allocator>) |
|
|
(C++11) | создаёт элемент на месте в конце (публичный метод класса std::vector<T,Allocator>) |
| удаляет последний элемент (публичный метод класса std::vector<T,Allocator>) |
|
| изменяет количество хранимых элементов (публичный метод класса std::vector<T,Allocator>) |
|
| меняет местами содержимое (публичный метод класса std::vector<T,Allocator>) |
|
Модификаторы, специфичные для |
|
| инвертирует все биты (публичный метод) |
|
|
[static] | меняет местами два std::vector<bool>::reference (публичный статический метод) |
Внешние функции
|
(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(C++20) | лексикографически сравнивает значения двух vectors (шаблон функции) |
специализация алгоритма std::swap (шаблон функции) |
|
|
(C++20) | удаляет все элементы, удовлетворяющие определённым критериям (шаблон функции) |
Вспомогательные классы
|
(C++11) | Поддержка хеширования для std::vector<bool> (специализация шаблона класса) |
Руководства по выводу типов (C++17)
Примечания
Если размер набора битов известен на этапе компиляции, можно использовать std::bitset, что предоставляет более богатый набор функций-членов. Кроме того, boost::dynamic_bitset существует как альтернатива std::vector<bool>.
Поскольку его представление может быть оптимизировано, std::vector<bool> необязательно удовлетворяет всем требованиям контейнера или последовательного контейнера. Например, так как std::vector<bool>::iterator определяется реализацией, он может не удовлетворять требованию итератора вперед. Использование алгоритмов, таких как std::search, которые требуют итераторов вперед, может привести к ошибкам на этапе компиляции или выполнения.
Версия vector из Boost.Container не специализируется для bool.
Примечания
| Макрос проверки наличия функции | Значение | Std | Функция |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Конструирование и вставка для контейнеров с использованием диапазонов |
Отчеты об ошибках
Следующие отчеты об ошибках, меняющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применимо к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 2187 | C++11 | специализации для bool не имели функций-членов emplace и emplace_back | добавлены |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/vector_bool