c++ - vector 索引的 uintmax_t

标签 c++ vector indexing bit-fields

我处理的基本上是一个位标志搜索掩码,我正在使用 vector 。这些索引需要达到机器上的最大整数(在 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 字符串路径,还是什么?

最佳答案

几乎所有的 STL 容器都会使用 size_t作为他们的尺寸类型。因此,根据您的系统,size_t可能被定义为 unsigned int ,在您的情况下可能是一个 32 位整数。这可以解释为什么编译器会提示。

UINTMAX_MAX定义为 UINT64_MAX ,所以它不适合 32 位整数。尝试使用 UINT32_MAX宏,或者独立于平台并使用 std::numeric_limits<size_t>::max() .

此外,尝试使用 std::bitset<N> .

关于c++ - vector 索引的 uintmax_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15060329/

相关文章:

c++ - 如何在 C++ 中构建复合 for 循环?

java - vector 卷积 - 计算相邻元素的索引

c++ - 从函数发回 vector

"or"语句中的 MySQL 索引

c++ - 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?

indexing - ElasticSearch - 更新现有索引的相似性度量

PHP 客户端通过 TCP 与 C++ 服务器通信

c++ - 在 c/c++ 中使用 mysql 连接器执行插入到表时出错

c++ - UTF8 转换 wxString::ToStdString()

C++: vector<set<string>> 函数初始化