Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: std::bitset  (Прочитано 5606 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 07-03-2010 16:39 » 

вопрос по bitset :

как я понимаю, биты хранятся "плотно прижатыми", то есть весь блок состоит из следующего количества байтов

count*size/8 + (count*size%8?1:0)


как корректно получить указатель на начало этого блока, чтоб сохранить где-то, а потом и обрантую операцию провернуть -  загрузить блок, создать экземпляр bitset и одним движением закатать данные (при помощи memset)?
« Последнее редактирование: 07-03-2010 20:33 от Алексей1153++ » Записан

Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 07-03-2010 17:17 » 

а, видимо, так

std::bitset<100> bs;

(BYTE*)&bs  - начало блока
sizeof(bs)  - длина блока в байтах


судя по
Код:
class bitset
{ // store fixed-length sequence of Boolean elements
typedef unsigned long _Ty; // base type for a storage word
enum {digits = _Bits}; // extension: compile-time size()
...
...
_Ty _Array[_Words + 1]; // the set of bits
};
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 07-03-2010 19:03 » 

У bitset должны быть операторы ввода из потока и вывода в поток.  А кроме того, метод to_string и конструктор из строки.
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 07-03-2010 19:04 » 

мне не нужна строка, мне надо один к одному побитовое содержание. Так как строка занимает места в 8 раз больше ) Ну и скорость страдает
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #4 : 10-03-2010 04:17 » 

Алексей1153++, если не получается Улыбаюсь читай инструкцию http://www.cplusplus.com/reference/stl/bitset/
1. конструктор может принимать строку вида "01101101101"
2. метод to_string может возвращать строку вида "01101101101"
Записан

Странно всё это....
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 10-03-2010 04:44 » 

LogRus, Не совсем понял, что не получается ? Улыбаюсь

А строки мне не нужны, я же говорю. Строка занимает места в 8 раз больше, чем массив с битами , да и скорось загрузки/извлечения всего блока данных ниже со строками
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #6 : 10-03-2010 04:59 » 

ну если набор не большой, то можно использовать to_ulong
НО я у себя использовал обёртку над вектором, вектор сбрасывать на диск и в БД проще
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines