Boost C++: библиотека Dynamic_Bitset

Данный класс представляет собой версию std::bitset, способную изменять свой размер во время выполнения программы. Разработан Джереми Сиком.

Описание:

Публичные данные-члены
template bits_per_block Количество битов в типе Block используемое для представления данных. Эквивалентно std::numeric_limits::digits
template npos Максимальное значение для количества элементов в контейнере
Конструкторы и деструктор
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::digits))
dynamic_bitset(const dynamic_bitset& x) Копирующий конструктор
template explicit dynamic_bitset(BlockInputIterator first, BlockInputIterator last,const Allocator& alloc = Allocator()); Создаёт 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 explicit dynamic_bitset(const std::basic_string& s,typename std::basic_string::size_type pos = 0,typename std::basic_string::size_type n = std::basic_string::npos,const Allocator& alloc = Allocator()) Создаёт 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 void append(BlockInputIterator first, BlockInputIterator last); Функция эквивалентна данному коду, но обычно более эффективна:
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 void to_string(const dynamic_bitset& b,std::basic_string& s) Возвращает строку представляющую данный dynamic_bitset.
"1" в строке соответствует установленному биту, "0" - неустановленному.
template void to_block_range(const dynamic_bitset& b, BlockOutputIterator result) Записывает биты dynamic_bitset по адресу, на который указывает итератор result
template void from_block_range(BlockIterator first,BlockIterator last, const dynamic_bitset& b) Читает биты из интервала [first,last) в dynamic_bitset
template basic_ostream &operator<<(basic_ostream& os, const dynamic_bitset& b) Выводит dynamic_bitset в поток вывода.
Эквивалентно следующему коду:
std::basic_string s;
boost::to_string(x, s);
os << s;
template std::basic_istream &operator>>(std::basic_istream& is, dynamic_bitset& b) Вводит dynamic_bitset из потока ввода

библиотека BOOST C++ http://www.boost.org
с разрешения автора: перевод Сова Анатолий Романович http://www.aproxim.narod.ru

  © Mental Computing 2010