Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170

Bitset<0>

04.05.2017, 14:36. Показов 2798. Ответов 28

Студворк — интернет-сервис помощи студентам
Не на англоязычных просторах
ни на наших не нашел,
что же означает определение как:
bitset<0>

Не по теме:

Моё предположение, это очищенный из памяти массив.
Но может ли такое быть? Ведь функции clear() нет

0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2017, 14:36
Ответы с готовыми решениями:

Bitset to int
Здравствуйте! вот пробую: bitset &lt;8&gt; id_paketa = 00000010; cout &lt;&lt; id_paketa &lt;&lt; &quot; &quot; &lt;&lt; id_paketa.to_ullong(); Почему получается...

Задача по bitset
Задача: Предположим, что существует последовательность 1,2,3,5,8,13,21. Инициализируйте набор bitset&lt;32&gt; так, чтобы в каждой из...

Запись bitset в bmp
Всем доброго времени суток, такая проблемка, не могу записать bitset в bmp вроде нашел пример и структуру файла, но рук не хватает ещё)). ...

28
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.05.2017, 14:43
Лучший ответ Сообщение было отмечено eXPonent как решение

Решение

bitset<0> - инстанцирование шаблонного класса bitset с параметром 0. То есть набор из 0 битов. Абсолютно бессмысленная конструкция.
1
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
04.05.2017, 14:55  [ТС]
т.е. написать bitset в котором (UINT_MAX+1) позиций нереально?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.05.2017, 16:07
Цитата Сообщение от eXPonent Посмотреть сообщение
bitset в котором (UINT_MAX+1) позиций нереально?
У bitset параметр size_t. Чем представлен size_t - вопрос платформы.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
04.05.2017, 16:11
Цитата Сообщение от MrGluck Посмотреть сообщение
У bitset параметр size_t
то есть оптимизации до uint8_t не будет при bitset<8> ?
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.05.2017, 16:26
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
то есть оптимизации до uint8_t не будет при bitset<8> ?
Что значит оптимизации? Тип для хранения может быть любым, ничто не мешает сделать оптимизацию, но и надеяться на неё не стоит.
Думаю, что там внутри лежит всё же статический массив.
size_t здесь нужен только как параметр для инстанцирования. Это не значит, что для хранения используется size_t. Вопрос немного из другой оперы.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
04.05.2017, 16:51
Цитата Сообщение от MrGluck Посмотреть сообщение
Думаю, что там внутри лежит всё же статический массив.
Какой массив Там переменная - а для инициализации/взятия бита используется маска.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.05.2017, 16:53
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Какой массив Там переменная - а для инициализации/взятия бита используется маска.
Там может быть что угодно. Думаю что сравнивается значение N. И если есть тип подходящего размера - используется он + маска. Если никаких стандартных типов не подходит - используется массив.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
04.05.2017, 16:54
А про оптимизацию, я не уверен можно ли без харкода:

C++
1
2
3
4
5
6
7
8
9
10
template<>
class Bitset<1>
{
 int8_t _a;
}
template<>
class Bitset<2>
{
 int8_t _a;
}
снизить переменную до типа поменьше - hoggy, можно как-то для шаблоном указать перегрузку для 0-8, 9-16, 17-32 ?

Добавлено через 57 секунд
Цитата Сообщение от MrGluck Посмотреть сообщение
Если никаких стандартных типов не подходит - используется массив.
разве можно создать bitset больше за size_t размер? А size_t это как раз переменная
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.05.2017, 16:56
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
можно как-то для шаблоном указать перегрузку для 0-8, 9-16, 17-32 ?
Можно специализировать шаблон для конкретных значений. Сейчас накатаю пример.

Добавлено через 1 минуту
Кстати, нашёл в сорцах студии
C++
1
2
3
4
5
template<size_t _Bits>
    class bitset
    {   // store fixed-length sequence of Boolean elements
public:
    typedef typename _If<_Bits <= 32, _Uint32t, _ULonglong>::type _Ty;
Ну то есть нечто похожее она и делает.
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
04.05.2017, 16:58
Цитата Сообщение от MrGluck Посмотреть сообщение
Сейчас накатаю пример.
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
можно ли без харкода:
Если это хардкод как для рекурсивного шаблона - то думаю я уже знаю этот приём кнопкодавства)

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
Кстати, нашёл в сорцах студии
значит особо не заморачивались - думаю это связано с тем, что битовые операции с маской лучше(быстрее) всё равно отработают на переменных кратных "машинному слову"
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.05.2017, 17:00
И ниже по тексту
C++
1
_Ty _Array[_Words + 1]; // the set of bits
Добавлено через 1 минуту
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Если это хардкод как для рекурсивного шаблона
Эх.. ну значит не судьба
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
04.05.2017, 17:03
Цитата Сообщение от MrGluck Посмотреть сообщение
Эх.. ну значит не судьба
ну в сорцах уже думаю есть решение - куча if'ов выйдет и будут разные типы и размеры bitset'a : int8_t, int16_t, int32_t, int64_t
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.05.2017, 18:57
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
можно как-то для шаблоном указать перегрузку для 0-8, 9-16, 17-32 ?
http://rextester.com/BWM28382


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//========================================================================
//========================================================================
//========================================================================
 
    /* demangle name ot type */
 
#include <typeinfo>
#include <string>
 
#if defined(__GNUC__) || defined(__MINGW32__) || defined(__MINGW__)
 
    #include <cxxabi.h>
    #include <memory>
    
    std::string demangle(const char* name) {
    
        int status = -1; 
        std::unique_ptr<char, void(*)(void*)> res {
            abi::__cxa_demangle(name, NULL, NULL, &status),
            std::free
        };
        return (status == 0) ? res.get() : name ;
    }
#else
 
    std::string demangle(const char* name) 
        { return name; }
 
#endif
 
template <class T>
std::string view_type(const T& t)
    { return demangle(typeid(t).name()); }
 
template <class T>
std::string view_type()
    { return demangle(typeid(T).name()); }
 
#define dDEMANGLE(type_) \
    view_type<type_>()
 
//========================================================================
//========================================================================
//========================================================================
 
 
 
 
namespace detail
{
    template<size_t N> struct select_type
    {
        enum { is_valid = N>=0  && N<=32 };
        enum { is_00_08 = N>=0  && N<=8  };
        enum { is_09_16 = N>=9  && N<=16 };
        enum { is_17_32 = N>=17 && N<=32 };
        
        static_assert(
            is_valid,
            "\n\n    ERROR: N >=0 && N<=32"
        );
        
        using type = typename std::conditional<is_00_08, uint8_t, 
            typename std::conditional<is_09_16, uint16_t, 
                typename std::conditional<is_17_32, uint32_t, uint64_t>::type
            >::type
        >::type;
    };    
    
}// namespace detail
 
template<size_t N> struct Bitset
{
    using type 
        = typename detail::select_type<N>::type;
};
 
 
#include <iostream>
 
int main()
{
    std::cout << dDEMANGLE(Bitset<3 >::type) << std::endl;
    std::cout << dDEMANGLE(Bitset<9 >::type) << std::endl;
    std::cout << dDEMANGLE(Bitset<31>::type) << std::endl;
}
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
04.05.2017, 23:12
hoggy, как-то всё так усложнено)
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
19.05.2017, 23:47  [ТС]
Вопрос актуален:
Цитата Сообщение от eXPonent Посмотреть сообщение
т.е. написать bitset в котором (UINT_MAX+1) позиций нереально?
т.к.
C++
1
2
3
bitset<UINT_MAX+1> *hash = new bitset<UINT_MAX+1>();
// эквивалентен
bitset<0> *hash = new bitset<0>();
а
Цитата Сообщение от MrGluck Посмотреть сообщение
bitset<0> - инстанцирование шаблонного класса bitset с параметром 0. То есть набор из 0 битов. Абсолютно бессмысленная конструкция.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.05.2017, 11:25
C++
1
2
const size_t sz = static_cast<size_t>(UINT_MAX) + 1;
bitset<sz> *hash = new bitset<sz>();
И приложение должно быть 64-битным.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
21.05.2017, 18:01  [ТС]
А по другому никак?
ведь (UINT_MAX+1) вмещается в size_t и обычный 32-битный или в unsigned long
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2017, 18:08
eXPonent, ты описание UINT_MAX читал? Это максимальное значение для unsigned, ничего сверх не поместится.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
21.05.2017, 18:11  [ТС]
size_t содержит в себе (UINT_MAX+1) чисел (образно)
от 0 до UINT_MAX
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2017, 18:11
Помогаю со студенческими работами здесь

Сравнение байтов в bitset
Помогите написать функцию, которая сравнивает байты (а точнее первые 3 бита в каждом байте bitset&lt;32&gt;) Просто кроме, как кейсом,...

внести char* в bitset
Всем привет! Хотел бы попросить у вас эффективный способ каким образом можно внести массив символов переменной длины (char buf)...

Что такое bitset<8>?
Можете пожалуйста подскозать что это bitset&lt;8&gt; это функция такая?

Аналог класса bitset (Стандарт C++11)
Нужно создать аналог класса Bitset (стандарт C++11) Самому удалось раскопать следующее: //default (1) constexpr bitset()...

Bitset<8388608> - Stack overflow
Пишу: bitset&lt;8388608&gt; hash; // (256^2)/2 Ошибка: Stakc overflow (ОЗУ&gt;3 Гб, но как я понял приложение не может пользоваться больше...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru