uintmax_t для векторных индексов

Я имею дело с маской поиска по битовому флагу и использую векторы. Эти индексы должны доходить до максимального целого числа на машине (определенного в 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, или как?

0

Решение

Практически все контейнеры STL будут использовать size_t как их размеры типов. Итак, в зависимости от вашей системы, size_t может быть определен как unsigned int, что, вероятно, будет 32-разрядным целым числом в вашем случае. Это объясняет, почему компилятор жалуется.

UINTMAX_MAX определяется как UINT64_MAX, поэтому он не помещается в 32-разрядное целое число. Попробуйте использовать UINT32_MAX макрос, или быть независимым от платформы и использовать std::numeric_limits<size_t>::max(),

Кроме того, попробуйте использовать std::bitset<N>.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]