uintmax_t用于矢量索引

时间:2013-02-25 04:50:20

标签: c++ vector indexing bit-fields

我基本上处理的是一个有点标记的搜索掩码,我正在使用向量。这些索引需要达到机器上的最大整数(在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数组索引会有同样大小的问题吗? / p>

我可以使vector的索引脱离uintmax_t,还是应该转到C字符串路径,还是什么?

1 个答案:

答案 0 :(得分:3)

实际上,所有STL容器都将使用size_t作为其大小类型。因此,根据您的系统,size_t可能被定义为unsigned int,在您的情况下可能是32位整数。这可以解释为什么编译器在抱怨。

UINTMAX_MAX定义为UINT64_MAX,因此它不适合32位整数。尝试使用UINT32_MAX宏,或与平台无关,并使用std::numeric_limits<size_t>::max()

另外,请尝试使用std::bitset<N>