我正在尝试检查布尔矢量2D数组中的元素是否为false。 初始化的二维布尔数组:
vector<vector<bool>> *visited;
visited[row][col];
memset(visited, false, sizeof visited);
if (!visited[row][col]) //error: no operator "!" matches these operands
有人有什么建议吗?
答案 0 :(得分:1)
您没有创建2D bool数组。
您甚至都没有创建2D bool向量。
您为此类对象创建了 pointer ,未对其进行初始化,然后尝试以几种不同的方式使用它(包括通过访问无效元素来调整其大小)。
不要那样做。
只需创建向量:
std::vector<std::vector<bool>> visited;
…然后以正常方式使用它(不包括用C的memset
来指责他们。)
您可以像这样调整它们的大小:
std::vector<std::vector<bool>> visited(col, std::vector<bool>(row));
(糟糕!)
然后,由于索引从0开始,最后尝试访问的次数超出了范围。
但是,在一般情况下,我会告诫不要使用2D向量(它们的内存布局很糟糕),如果您的数据是矩形的,则最好使用1D向量。您始终可以将2D索引映射到该1D“地址空间”的顶部。
答案 1 :(得分:0)
@Tran Huynh 作者
vector<vector<bool>> visited(rows, vector<bool>(cols));
默认将所有元素初始化为 false