我正在编写一些代码,用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先前已定义,并且是整数。我发现了多个关于迭代器不能解除引用的问题,但是无法将修复程序应用到我自己的问题中,因此欢迎提出任何见解,感谢您的时间!
答案 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+1
和y+1
,然后您的for
循环将起作用。