Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > bitset, как задать размер динамически?


Автор: OlegIT 22.1.2008, 17:28
Использую шаблон bitset. Но число битов определяется в процессе работы программы. Использовать большую величину для инициализации не хочется, а методов - задать размер, добавить бит … найти не могу. Как можно динамически задать количество битов?

 ! 
archimed7592
Название темы должно отражать ее суть.

Автор: bsa 22.1.2008, 17:36
Используй http://www.boost.org/libs/dynamic_bitset/dynamic_bitset.html или пиши сам

Автор: archimed7592 22.1.2008, 18:44
Как вариант, vector< bool >.

Автор: Mayk 23.1.2008, 09:35
или deque<bool>, если боишься стандартной "оптимизации" vector<bool>

Автор: archimed7592 23.1.2008, 10:11
Оптимизация, как раз таки здесь уместна.

Автор: OlegIT 23.1.2008, 10:22
vector<bool> и deque<bool>, не подойдёт, так как не получатся взять uint, а это самое основное из-за чего использую bitset.

Автор: archimed7592 23.1.2008, 10:52
Тогдыть dynamic_bitset + http://www.boost.org/libs/dynamic_bitset/dynamic_bitset.html#to_block_range

Автор: Mayk 23.1.2008, 13:59
Цитата(archimed7592 @  23.1.2008,  14:11 Найти цитируемый пост)
Оптимизация, как раз таки здесь уместна. 

Превращать контейнер в не контейнер здесь не уместно. 
И это не только моё имхо.


Автор: Earnest 23.1.2008, 19:27
Цитата(OlegIT @  23.1.2008,  11:22 Найти цитируемый пост)
vector<bool> и deque<bool>, не подойдёт, так как не получатся взять uint, а это самое основное из-за чего использую bitset.

Число битов изменить нельзя, т.к. это аргумент шаблона - т.е. определяется в момент компиляции.
ИМХО, поскольку собираешься получать UINT, то битов у тебя не более 32 - какой динамический размер?
Если уже очень приспичило "динамически", сделай небольшую обертку, включающую bitset<32> и текущий размер (т.е число битов). На полчаса работы.

Автор: archimed7592 23.1.2008, 20:50
Цитата(Earnest @  23.1.2008,  19:27 Найти цитируемый пост)
включающую bitset<32> 

bitset< sizeof(unsigned int) * CHAR_BIT >  smile.

Автор: JackYF 23.1.2008, 21:05
Цитата(archimed7592 @  23.1.2008,  19:50 Найти цитируемый пост)
CHAR_BIT

в байте бывает не 8 битов?..

Цитата(archimed7592 @  23.1.2008,  19:50 Найти цитируемый пост)
sizeof(unsigned int) * CHAR_BIT

хз, насколько в данном случае это уместно - весь остальной код тогда тоже должен опираться только на sizeof(unsigned int). Не факт, что вообще используется тип unsigned int - возможно, жёстко используются именно 32 бита.

Автор: archimed7592 24.1.2008, 02:51
Цитата(JackYF @  23.1.2008,  21:05 Найти цитируемый пост)
в байте бывает не 8 битов?..

Угу smile.


Цитата(JackYF @  23.1.2008,  21:05 Найти цитируемый пост)
хз, насколько в данном случае это уместно - весь остальной код тогда тоже должен опираться только на sizeof(unsigned int)

Можно на sizeof T, где тип T вычисляется метапрограммным способом(минимальный тип, имеющий необходимое кол-во бит).

Цитата(JackYF @  23.1.2008,  21:05 Найти цитируемый пост)
Не факт, что вообще используется тип unsigned int - возможно, жёстко используются именно 32 бита.

Возможно всё - только откуда взялась эта магическая цифра 32? smile

Автор: JackYF 24.1.2008, 10:18
Цитата(archimed7592 @  24.1.2008,  01:51 Найти цитируемый пост)
только откуда взялась эта магическая цифра 32?

если мне надо число о 0 до 4-х с лишним миллиардов, то я знаю, что мне надо ровно 32 бита, не 16 и не 64, независимо от размеров любых системных типов.

Автор: Earnest 24.1.2008, 12:25
Да какая разница-то? Хоть 32, хоть 33. Автор же собирался добывать Ulong из битсета, значит все его биты должны в этот самый ulong влезть. Ну пусть будет 64... Или именованная константа. Смысл-то не в этом...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)