繁体   English   中英

将向量大小调整为 2^31 以上后的 std::length_error

[英]std::length_error after resizing a vector to more than 2^31

调整向量大小超过 2^31 后的 std::length_error 。 简单的错误:

#include <vector>
#include <iostream>

int main(){
    std::vector<bool> arr;
    arr.resize(2147483650,0);
    return 0;
}

错误是:

terminate called after throwing an instance of 'std::length_error'
  what():  vector<bool>::_M_fill_insert

如果我选择低于 2^31 的任何东西,我很好。 我需要一个长于 2^31 的 bool 向量,现在我有足够的 RAM 来支持它。 我该如何解决这个问题? (也许以某种方式提高 std::length_error 限制?)

PS 这可能是一个重复的 Q 但我在任何地方都找不到解决方案......(当我在谷歌上搜索时,我只找到字符串错误)。 另外,也许我正在想象一些事情,但我很确定我设法调整了它的大小并且一周前没有出现错误。 我不知道。

正如评论中所写,在 32 位系统中,2 31是一种硬限制,您永远无法超过。

一种解决方法是对向量​​的元素使用uint8_t (或任何其他无符号整数类型)而不是bool 这会将您的限制增加到 2 34位,但需要对代码进行一些不舒服的更改。 标准vector<bool>实现完成了所有需要的位调整,但它不能超过 2 31 个元素,因为索引/迭代器不能用 32 位整数实现。

但最终的解决方案是编译为 64 位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM