C ++向量bool错误:"迭代器不可解除错误"在分配值时

时间:2015-03-13 12:44:23

标签: c++ vector

我正在编写一些代码,用C ++创建一个动态2d Booleans向量,然后尝试为其赋值但是我收到错误:

Expression:vector<bool> iterator not dereferencable

我的矢量定义如下:

vector<vector<bool> > sol((x+1), vector<bool>(y+1));

然后我尝试将值分配给第一行,如下所示:

for (int i = 0; i <= x; i++) {
    sol[0][i] = true;
}

但是我收到了上述错误。 x和y先前已定义,并且是整数。我发现了多个关于迭代器不能解除引用的问题,但是无法将修复程序应用到我自己的问题中,因此欢迎提出任何见解,感谢您的时间!

2 个答案:

答案 0 :(得分:2)

C ++标准规定std::vector<bool>std::vector的专业化。特别是,数据紧密打包,每个元素1位。

因此无法在bool s的向量上取消引用迭代器:标准未指定bool类型的大小。

至于替代方案,请查看std::bitset

答案 1 :(得分:2)

您的代码大多是正确的。尽管另一个答案是,但您可以像vector<bool>一样分配到vec[i]=true;

但是,代码的问题是x+1是2d向量的外部维度的大小,但是您使用它来迭代内部维度y+1 。如果x > y,则会导致未定义的行为。

假设x+1是行长度,您的向量当前以列主要顺序存储(每个内部向量代表一列)。如果您想要行主要顺序(更常用),请在向量初始化中替换x+1y+1,然后您的for循环将起作用。