bool vizitat[60][60];

...

if(/*some condition*/)
{
    vizitat[n][m] = {0}; // set all the elements to `false`.
    /*other code here*/
}

有没有一种方法可以将vizitat的每个元素设置为0,理想情况下没有显式循环?

最佳答案

由于vizitat被声明为bool vizitat[60][60];

std::fill(
    &vizitat[0][0]/*the first element*/,
    &vizitat[0][0] + sizeof visitat / sizeof(bool) /*one after the last element*/,
    false
);

会做到的。

这是因为数组中的数据是连续的。尽管编译器可能会对此进行优化,但是使用std::memset通常并不安全。

请注意,如果按行分配内存,这种方法将行不通。有关更多详细信息,请参见How are multi-dimensional arrays formatted in memory?

09-04 17:40