Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
#1

vector<bool> утверждение - C++

16.09.2011, 22:26. Просмотров 1587. Ответов 15
Метки нет (Все метки)

друзья! Страутструп утверждает что проще пареной репы. подскажите как? что то в голову не идет.
Как сделать так чтобы элемент вектор бул занимал всего 1 бит
0
Миниатюры
vector<bool> утверждение  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2011, 22:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос vector<bool> утверждение (C++):

bool vector - C++
#include &lt;iostream&gt; using namespace std; #include &lt;vector&gt; int main() { vector&lt;bool&gt; myBool(10);

Vector<bool> и visual c++ - C++
Приветствую, пытаюсь адаптировать консольный исходник алгоритма Хаффмана в форменное приложение visual Studio 2005 c++. Объявляю вначале...

vector<vector <bool> > - C++
vector&lt;vector &lt;bool&gt; &gt; v1; bool v2 = { {1,1}, {1,1}, }; как v1 присвоить v2? Добавлено через 1 минуту в c++11...

Vector <bool> erase iterator outside range - C++
Помогите, пожалуйста. При компиляции появляется ошибка (фото ниже). Это реализация алгоритма Хаффмана. Не могу понять, что не так, по...

Упаковка std :: vector <bool> в байты - C++
Добрый Вечер! возникла проблема: нужно элементы std::vector&lt;bool&gt; упаковать в байты для последующей записи в файл собственно,...

Как в vector поместить double, bool? - C++
#include &lt;stdio.h&gt; #include &lt;vector&gt; using namespace std; void main() { vector&lt;int&gt; vec; double t = -12.34; bool b =...

15
bambino
194 / 20 / 4
Регистрация: 05.08.2010
Сообщений: 229
16.09.2011, 22:40 #2
AzaKendler,
In this template specialization, each element occupies only one bit (which is eight times less than the smallest type in C++: char).
http://www.cplusplus.com/reference/stl/vector/
0
sandye51
программист С++
687 / 592 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.09.2011, 22:50 #3
Цитата Сообщение от AzaKendler Посмотреть сообщение
Как сделать так чтобы элемент вектор бул занимал всего 1 бит
использовать массив блоков в самом классе, он представляем собой последовательность битов, к каждому биту которой можно обращаться через побитовые операции
например в случае типа char каждый блок это 8 бит
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.09.2011, 22:54  [ТС] #4
каков sizejf(bool) - 1 байт? каким образом адресуется только 1 бит, да еще если это все лежит в контейнере. за определениями не вижу реализации. это е мало о чем сказало.

если я например делаю однобайтную структуру то могу разбить его внутри на биты. но размер поля в любом случае будет 1 байт. вот мне и непонятно. как реализовано в векторе? например есть структурка типа бул, она разбита каждая на 8 бит. как реализован оператор [] в данном случае чтоб я мог пробраться к значению поля

Добавлено через 2 минуты
sandye51, распиши плиз коротенько. в 2х словах твое видение. например оператор [].
какая битовая операция должна будет использоваться.

C++
1
2
3
4
5
vector<bool> vec (155);
 
vec [45] = true;
 
bool triger = vec[45];
0
bambino
194 / 20 / 4
Регистрация: 05.08.2010
Сообщений: 229
16.09.2011, 22:55 #5
Цитата Сообщение от AzaKendler Посмотреть сообщение
каков sizejf(bool) - 1 байт?
sizeof(bool) are implementation-defined.
0
sandye51
программист С++
687 / 592 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.09.2011, 22:55 #6
например есть массив char b[5];
всего элементов значит 8 * 5 = 40;
вопрос, как установить 25-ый бит?
s = 25 % 8 = 1;
m = 25 / 8 = 3;
значит надо в 3 байте установить первый бит
char tmp = 1;
tmp << s;
b[m] |= s;
получили что хотели.
считать тоже просто
1
iama
1254 / 979 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.09.2011, 22:56 #7
bitset
0
sandye51
программист С++
687 / 592 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.09.2011, 23:00 #8
Цитата Сообщение от iama Посмотреть сообщение
bitset
boost::dymanic_bitset
0
iama
1254 / 979 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.09.2011, 23:04 #9
sandye51, не всегда есть boost, а простой bitset - гарантированно будет.
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.09.2011, 23:21  [ТС] #10
да блин парни. просто понять смысл хочу. не надо про битсет и про буст. вопрос в том чтобы понять как оно работает


s = 25 % 8 = 1;
m = 25 / 8 = 3;
значит надо в 3 байте установить первый бит
char tmp = 1;
tmp << s;
s,m это int?

tmp << s - что куда двигаем. это tmp = tmp<<s?

Добавлено через 16 минут
ладно. наверное все спят уже. спасибо за пример
0
iama
1254 / 979 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.09.2011, 23:25 #11
AzaKendler, блин, ну что тут не понятного-то? Сначала находим номер байта, в котором лежит нужный бит (m), находим, каким будет этот бит в байте (s), и побитовым или "включаем" его.
1
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.09.2011, 23:31  [ТС] #12
iama, напиши плиз полный пример или его прокомментируй. я там с типами не могу понять.

Добавлено через 1 минуту
а все дошло. благожарю
0
List2006
24 / 16 / 2
Регистрация: 19.12.2009
Сообщений: 366
16.09.2011, 23:44 #13
один бит?
C++
1
2
3
4
struct mybool
{
    unsigned int b : 1 // будет занимать 1 бит (не байт)
};
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.09.2011, 23:48  [ТС] #14
List2006, а сама структура то будет небось 4 байта весить?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.09.2011, 00:10 #15
Цитата Сообщение от AzaKendler Посмотреть сообщение
List2006, а сама структура то будет небось 4 байта весить?
да, но в С++(03) в отличии от С(89) можно написать так
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
struct mybool
{
    unsigned char b : 1; 
};
 
int main()
{
   std::cout << sizeof(mybool);
}
и структура будет занимать 1 байт, другое дело что при таком раскладе нужно чаще будет производить реаллокацию
0
17.09.2011, 00:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2011, 00:10
Привет! Вот еще темы с ответами:

Ошибка при использовании vector<bool> - C++
Текст ошибки (Visual studio 2013): Ошибка 2 error C2440: return: невозможно преобразовать...

Примерная реализация std vector bool - C++
добрый вечер, не могу найти в сети реализацию st::vector&lt;bool&gt; - есть у кого под рукой?) Почитать)

Ребята есть ли метод vector <bool> записать в бинарный файл? - C++
Всем доброго времени. Возник вопрос есть ли такой хитрый способ чтоб можно было записать в бинарник значения булл имеем vector &lt;bool&gt;...

Ошибка “vector<bool> erase iterator outside range” при работе алгоритма Хаффмана - C++
Проблема с функцией BuildTable. Компилируется, но в процессе работы возникает ошибка. // Huffmann.cpp: определяет точку входа для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru