Шаг 351.
Библиотека STL. Специальные контейнеры. Строение класса bitset. Операции создания, копирования и уничтожения

    На этом шаге мы перечислим операции создания, копирования и уничтожения, принадлежащие классу bitset.

    Начиная с этого шага, мы перечислим операции, поддерживаемые классом bitset.

Операции создания, копирования и уничтожения

    Для битовых полей определено несколько специальных конструкторов. С другой стороны, для них не определены специальный копирующий конструктор, оператор присваивания и деструктор. Это означает, что присваивание и копирование битовых полей производится стандартными операциями поразрядного копирования.

bitset<paзмер>::bitset ()
Конструктор по умолчанию. Создает битовое поле, в котором все биты инициализированы нулями. Пример:
bitset<50> flags; // Флаги: 0000...000000 - всего 50 нулевых битов
bitset<размер>::bitset (unsigned long value)
Создает битовое поле и инициализирует его битами целочисленного значения value. Если количество битов в value слишком мало, недостающие начальные биты инициализируются нулями. Пример:
bitset<50> flags(7);   // Флаги: 0000...000111
explicit bitset<размер>::bitset (const string& str) 
bitset<размер>::bitset (const string& str, string::size_type str_idx) 
bitset<размер>::bitset (const string& str, string::size_type str_idx, 
                        string::size_type str_num)
Все формы возвращают битовое поле, инициализированное строкой str или входящей в нее подстрокой.

Строка или подстрока может содержать только символы "0" и "1".

Параметр str_idx определяет индекс первого символа str, используемого для инициализации.

Если параметр str_num не задан, используются все символы от позиции str_idx до конца строки.

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

Если количество символов в строке или подстроке больше необходимого, лишние символы игнорируются.

Если выполняется условие str_idx>str.size(), генерируется исключение out_of_range.

Если хотя бы один символ отличен от "0" и "1", генерируется исключение invalid_argument.

Обратите внимание: конструктор объявлен в виде шаблонной функции класса, из-за чего отсутствует неявное преобразование типа первого параметра из const char* в string.


   Замечание. Вероятно, это объясняется ошибкой в стандарте, поскольку в ранних версиях стандарта допускалось использование конструкций вида bitset2 flags("1010101"). При преобразовании конструктора в шаблон для разных строковых типов этот механизм автоматического преобразования типа был случайн утрачен. В настоящее время рассматривается предложение по исправлению этой ошибки.

bitset<50> flags(string("1010101")); // Флаги: 0000...0001010101 
bitset<50> fiags(string("1111000")); // Флаги: 0000...0001111000

    На следующем шаге мы рассмотрим немодифицирующие операции.




Предыдущий шаг Содержание Следующий шаг