Данный класс представляет собой версию
std::bitset, способную изменять свой размер во время выполнения программы.
Разработан Джереми Сиком.
Описание:
| Публичные данные-члены | |
|---|---|
|
template |
Количество битов в типе Block используемое для представления данных. Эквивалентно std::numeric_limits |
|
template | Максимальное значение для количества элементов в контейнере |
| Конструкторы и деструктор | |
| dynamic_bitset(const Allocator& alloc = Allocator()) | Создаёт экземпляр объекта dynamic_bitset с нулевым размером |
| dynamic_bitset(size_type num_bits,unsigned long value = 0,const Allocator& alloc = Allocator()) |
Создаёт dynamic_bitset
из целого числа. Превые M битов are иннициализируются соответсвующими
битами в value а все прочие биты, если присутствуют, иннициализируются
нулём (где M = min(num_bits, std::numeric_limits |
| dynamic_bitset(const dynamic_bitset& x) | Копирующий конструктор |
|
template | Создаёт dynamic_bitset, основываясь на интервале блоков. Примем *first блоком с номером 0, *++first блоком с номером 1, и т.д. Блок с номером b используется для инниуциализации битов dynamic_bitset в интервале [b*bits_per_block, (b+1)*bits_per_block). Для каждого блока номер b со значением bval, бит (bval >> i) & 1 соответствует биту позиции (b * bits_per_block + i) в dynamic_bitset (где i находится в интервале [0, bits_per_block)) |
|
template |
Создаёт dynamic_bitset
из строки, состоящей из нулей и единиц. Превые M битов
иннициализируются соответствующими символами в s, где M = min(s.size()
- pos, n). Замечание: Самая первая позиция символа в s, не последняя, соответствует минимальному значащему биту. То есть, позиция символа pos + M - 1 - i соответствует биту i. Пример: dynamic_bitset(string("1101")) то же самое что и dynamic_bitset(13ul) |
| ~dynamic_bitset() | Деструктор |
| Функции-члены | |
| void swap(dynamic_bitset& b); | Обмен значениями между двумя экземплярами dynamic_bitset |
| dynamic_bitset& operator=(const dynamic_bitset& x) | Присваивание значения одного dynamic_bitset другому dynamic_bitset |
| allocator_type get_allocator() const; | Возвращает копию распределителя памяти, используемого для конструирования *this |
| void resize(size_type num_bits, bool value = false); | Изменяет количество битов в dynamic_bitset на num_bits. Если num_bits > size() тогда биты в интервале [0,size()) остаются такими же, а биты в интервале [size(),num_bits) становятся равными value. Если num_bits < size() тогда биты в интервале [0,num_bits) остаются такими же |
| void clear() | Количество битов в dynamic_bitset становится равным нулю |
| void push_back(bool value); | Увеличивает размер dynamic_bitset на единицу, и устанавливает новый наиболее значимый бит в единицу |
| void append(Block value); | Добавляет биты в value в dynamic_bitset (добавляет наиболее значимые биты), увеличивая размер dynamic_bitset на bits_per_block. Примем s - старое значение размера dynamic_bitset, тогда для i в интервале [0,bits_per_block), бит в позиции (s + i) устанавливается в ((value >> i) & 1) |
|
template |
Функция эквивалентна данному коду, но обычно более эффективна: for (; first != last; ++first) append(*first); |
| dynamic_bitset& operator&=(const dynamic_bitset& rhs) |
Производит операцию AND со всеми битами в dynamic_bitset Замечание: Требуется чтобы this->size() == rhs.size() |
| dynamic_bitset& operator|=(const dynamic_bitset& rhs) |
Производит операцию OR со всеми битами в dynamic_bitset Замечание: Требуется чтобы this->size() == rhs.size() |
| dynamic_bitset& operator^=(const dynamic_bitset& rhs) |
Производит операцию XOR со всеми битами в dynamic_bitset Замечание: Требуется чтобы this->size() == rhs.size() |
| dynamic_bitset& operator-=(const dynamic_bitset& rhs) |
Вычисляет разницу между даным dynamic_bitset и rhs. Функция эквивалентна следующему коду: for (size_type i = 0; i != this->size(); ++i) (*this)[i] = (*this)[i] && !rhs[i]; Замечание: Требуется чтобы this->size() == rhs.size() |
| dynamic_bitset& operator<<=(size_type n) | Сдвигает биты в dynamic_bitset на n позиций влево. Для каждого бита в dynamic_bitset, бит в позиции pos берётся из предыдущего значения бита в позиции pos - n, или 0 если такого бита не существует |
| dynamic_bitset& operator>>=(size_type n) | Сдвигает биты в dynamic_bitset на n позиций вправо. Для каждого бита в dynamic_bitset, бит в позиции pos берётся из предыдущего значения бита в позиции pos - n, или 0 если такого бита не существует |
| dynamic_bitset& operator<<(size_type n) | Возвращает копию *this сдвинутую на n позиций влево. Для каждого бита в dynamic_bitset, бит в позиции pos берётся из предыдущего значения бита в позиции pos - n, или 0 если такого бита не существует |
| dynamic_bitset& operator>>(size_type n) | Возвращает копию *this сдвинутую на n позиций вправо. Для каждого бита в dynamic_bitset, бит в позиции pos берётся из предыдущего значения бита в позиции pos - n, или 0 если такого бита не существует |
| dynamic_bitset& set() | Устанавливает все биты данного dynamic_bitset в 1 |
| dynamic_bitset& flip() | Инверсирует все биты данного dynamic_bitset |
| dynamic_bitset operator~() const | Копия инвертированного dynamic_bitset |
| dynamic_bitset& reset() | Очищает все биты данного dynamic_bitset |
| dynamic_bitset& set(size_type n, bool val = true) |
Устанавливает n битов в 1 если val == true, или в 0 если val == false. Замечание: n должно быть < this->size() |
| dynamic_bitset& reset(size_type n) |
Очищает n битов в dynamic_bitset Замечание: n должно быть < this->size() |
| dynamic_bitset& flip(size_type n) |
Инвертирует битов в dynamic_bitset Замечание: n должно быть < this->size() |
| size_type size() const | Возвращает количество битов в dynamic_bitset |
| size_type num_blocks() const |
Возвращает количество блоков в dynamic_bitset |
| size_type max_size() const; |
Возвращает максимальное количество элементов для dynamic_bitset имеющего тот же тип что и *this |
| bool empty() const; |
Возвращает true если dynamic_bitset пустой, false в противном случае |
| size_type count() const |
Возвращает количество установленных битов в dynamic_bitset |
| bool any() const |
Возвращает true если в dynamic_bitset если хоть один бит установлен в 1, false в противном случае |
| bool none() const |
Возвращает true если в dynamic_bitset если ни один бит установлен в 1, false в противном случае |
| bool test(size_type n) const |
Возвращает true если в dynamic_bitset бит n установлен в 1, false в противном случае |
| reference operator[](size_type n) | Возвращает ссылку на бит с номером n |
| bool operator[](size_type n) const | Эквивалентно test(n) |
| unsigned long to_ulong() const |
Возвращает dynamic_bitset в представлении unsigned long. В случае переполнения вызывается исключение std::overflow_error |
| bool is_subset_of(const dynamic_bitset& a) const |
Возвращает true, если данный dynamic_bitset является подмножеством а, иначе false |
| bool is_proper_subset_of(const dynamic_bitset& a) const |
Возвращает true, если данный dynamic_bitset является собственным подмножеством а, иначе false |
| size_type find_first() const; | Возвращает минимальный индекс бита, который установлен в 1, или же npos если ни один бит не установлен в 1 |
| size_type find_next(size_type pos) const; | Возвращает минимальный индекс бита, который установлен в 1, который больше pos или же npos если такого индекса не существует |
|
bool operator==(const dynamic_bitset& rhs) const bool operator!=(const dynamic_bitset& rhs) const bool operator<(const dynamic_bitset& rhs) const bool operator>(const dynamic_bitset& rhs) const bool operator<=(const dynamic_bitset& rhs) const bool operator>=(const dynamic_bitset& rhs) const |
Операторы сравнения для dynamic_bitset |
| Статические функции | |
|
dynamic_bitset operator&(const dynamic_bitset& a, const dynamic_bitset& b) dynamic_bitset operator|(const dynamic_bitset& a, const dynamic_bitset& b) dynamic_bitset operator^(const dynamic_bitset& a, const dynamic_bitset& b) |
Логические операции (AND,OR,XOR) для dynamic_bitset . Возвращают новую копию dynamic_bitset. Замечание: Требуется чтобы a.size() == b.size() |
| dynamic_bitset operator-(const dynamic_bitset& a, const dynamic_bitset& b) |
Возвращает новый dynamic_bitset который представляет собой разницу между ними. Замечание: Требуется чтобы a.size() == b.size() |
|
template |
Возвращает строку представляющую данный dynamic_bitset. "1" в строке соответствует установленному биту, "0" - неустановленному. |
|
template | Записывает биты dynamic_bitset по адресу, на который указывает итератор result |
|
template | Читает биты из интервала [first,last) в dynamic_bitset |
|
template |
Выводит dynamic_bitset в поток вывода. Эквивалентно следующему коду: std::basic_string boost::to_string(x, s); os << s; |
|
template | Вводит dynamic_bitset из потока ввода |
библиотека BOOST C++
http://www.boost.org
с разрешения автора: перевод
Сова Анатолий Романович
http://www.aproxim.narod.ru