使用If条件的Bool向量2D数组

时间:2019-03-03 00:35:52

标签: c++

我正在尝试检查布尔矢量2D数组中的元素是否为false。 初始化的二维布尔数组:

vector<vector<bool>> *visited;
visited[row][col];
memset(visited, false, sizeof visited);

if (!visited[row][col]) //error: no operator "!" matches these operands

有人有什么建议吗?

2 个答案:

答案 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