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


Автор: _hunter 29.3.2005, 23:01
Добрый день.

Понадобилось мне с битовыми множествами работать; проглядев хелп, нашел bitset. и тут оказалось что его размер должен задаваться на этапе компиляции ( что за бред? ). собственно вопрос: можно ли что-то сделать что бы размер задавался просто константой?

Заранее благодарю за ответ.

Автор: cardinal 29.3.2005, 23:08
Цитата(_hunter @ 29.3.2005, 21:01)
с битовыми множествами

А что это?

Автор: Fire-Plug 29.3.2005, 23:33
Цитата(cardinal @ 29.3.2005, 23:08)
Цитата (_hunter @ 29.3.2005, 21:01)
с битовыми множествами


А что это?

То же, что и последовательность битов. Или же ты про STL класс bitset спрашиваешь?

Автор: cardinal 29.3.2005, 23:48
Цитата(Fire @ 29.3.2005, 21:33)
Или же ты про STL класс bitset спрашиваешь?

Да нет. Я в о общем спрашиваю. Я не очень понял зачем _hunter нужен bitset...
_hunter, напиши пример того, что ты хочешь сделать. Может тут и bitset никакой не нужен?

Автор: Fire-Plug 29.3.2005, 23:56
Цитата(_hunter @ 29.3.2005, 23:01)
собственно вопрос: можно ли что-то сделать что бы размер задавался просто константой?


Размер bitset задается в конструкторе константным выражением, к-рое как известно, вычисляется на этапе компиляции.
Например, (© MSDN)
Код

std::bitset<2 * sizeof (int)> bs;



Автор: Олег М 30.3.2005, 07:40
Цитата(_hunter @ 29.3.2005, 23:01)
Понадобилось мне с битовыми множествами работать; проглядев хелп, нашел bitset. и тут оказалось что его размер должен задаваться на этапе компиляции ( что за бред? ). собственно вопрос: можно ли что-то сделать что бы размер задавался просто константой?

Тебе скорее всего надо std::vector<bool> - это битовый массив

Автор: srd 30.3.2005, 07:56
std::bitset - предназначен для битовых множеств с постоянной длиной. Если длина может изменяться, то используется std::vector<bool>. В нормальных реализациях STL присутствует специализация этого шаблона, в котором один элемент занимает один бит. Но в STL от MSVC++ 6.0 такой специализации нет, там один элемент std::vector<bool> занимает байт. Начиная с седьмой версии это исправили.

Автор: Dark Elf 30.3.2005, 09:14
Мой тебе совет - используй boost::dynamic_bitset

http://boost.org

Кроме того на форуме chipset выложил мой перевод документации к нему:

http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel&article=2336

Автор: DENNN 30.3.2005, 09:22
Я бы посоветовал почитать Мейерса "эффективное использование STL". Там по-поводу bitset'ов много интересных замечаний в конце книги. и добрый совет напоследок - использовать vector<char> вместо vector<bool>

Автор: _hunter 30.3.2005, 14:31
cardinal, мне именно с набором битов работать нужно. ( пока и работаю с vactor<bool> просто у bitset' a есть куча удобных операторов... )
DENNN, а чем ector<char> лучше vector<bool>?

Автор: Daevaorn 30.3.2005, 20:20
_hunter, тебя спасет великий буст: boost::dynamic_bitset. Быстро и удобно...

Автор: _hunter 30.3.2005, 22:53
не уверен что он под билдер станет...

Автор: Dark Elf 31.3.2005, 09:17
2 _hunter - а почему ты считаешь что не станет?
Вон сколько платформ поддерживается:
http://boost.org/more/getting_started.html

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