Я имею дело с маской поиска по битовому флагу и использую векторы. Эти индексы должны доходить до максимального целого числа на машине (определенного в stdint.h)
В основном проблема в том,
searchMask[ UINTMAX_MAX] = false; // or any value > unsigned int
приводит к следующему предупреждению
warning: C4244: 'argument' : conversion from 'uintmax_t' to 'unsigned int',
possible loss of data
Я подумал только об использовании чего-то вроде unsigned char* = "1110010..."
и просто переворачивать биты таким образом, но работа с C-строками — это всегда боль, и я подозреваю, что доступ к индексу массива char будет иметь такую же проблему размера?
Могу ли я сделать индексы vector
сойти с uintmax_t
, или я должен идти по маршруту C string, или как?
Практически все контейнеры STL будут использовать size_t
как их размеры типов. Итак, в зависимости от вашей системы, size_t
может быть определен как unsigned int
, что, вероятно, будет 32-разрядным целым числом в вашем случае. Это объясняет, почему компилятор жалуется.
UINTMAX_MAX
определяется как UINT64_MAX
, поэтому он не помещается в 32-разрядное целое число. Попробуйте использовать UINT32_MAX
макрос, или быть независимым от платформы и использовать std::numeric_limits<size_t>::max()
,
Кроме того, попробуйте использовать std::bitset<N>
.
Других решений пока нет …