Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将二维数组的所有元素设置为零_C++_Arrays_C++14 - Fatal编程技术网

C++ 将二维数组的所有元素设置为零

C++ 将二维数组的所有元素设置为零,c++,arrays,c++14,C++,Arrays,C++14,此代码仅适用于第一个测试用例。对于下一个测试用例,它不会将元素设置为零 我负担不起运行循环来运行循环并迭代所有元素。 我想在O1中执行此任务。可能吗?您在两次运行之间使用相同的数组,并且希望将其重置为零。您无法避免对所有单元格进行迭代并将其设置为零。 即使在减容时初始化为零,也没有承诺O1这样的事情。编译器初始化的方式取决于编译器。首先,您似乎对术语有点误解 这是一个初始化: int a[100][100]; //globally declared array int main() {

此代码仅适用于第一个测试用例。对于下一个测试用例,它不会将元素设置为零

我负担不起运行循环来运行循环并迭代所有元素。
我想在O1中执行此任务。可能吗?

您在两次运行之间使用相同的数组,并且希望将其重置为零。您无法避免对所有单元格进行迭代并将其设置为零。
即使在减容时初始化为零,也没有承诺O1这样的事情。编译器初始化的方式取决于编译器。

首先,您似乎对术语有点误解

这是一个初始化:

int a[100][100]; //globally declared array
int main()
{
    while(testcases--)
    {
        a[100][100]={0};
        //rest of code
    }
    return 0;
}
这是一项任务:

int a = b;
可以使用以下代码将数组初始化为零:

int a;
a = b;
或:

或:

请记住,全局数组和静态数组默认为零初始化

创建数组后,可以按如下方式将其填充为零:

int array[10][20] {};
或:

附笔。
对于O1,您不能在运行时用零填充数组。

您的数组在第一个测试用例中初始化为零,因为它是用静态存储持续时间声明的。这种具有静态存储持续时间的阵列从零开始初始化

你的

线路与此无关。这实际上只是一个[100][100]=0,它将单个0写入数组中不存在的越界元素。该行为未定义

如果您想在每次迭代时用零重新初始化数组,则必须手动或使用库级解决方案,因为没有任何核心语言级功能可以为您这样做。在您的例子中,整数数组甚至可以使用老式的

a[100][100]={0};
你也可以使用一些聪明但低效的东西,比如

std::memset(a, 0, sizeof a);

在每次迭代中,可能不值得这样做。

您不需要做任何事情。数组已经零初始化了。是的,我知道。但是对于第二个测试用例等,数组不是零初始化的。并且[100][100]会导致越界写入。您不是将其初始化为零,而是在101X101处写入0,这是越界的。我看到……对于一维数组,a[100]={0}起作用。二维数组的语法是什么?好的,有其他方法吗?我会说,放弃O1要求,在2个嵌套循环中重置单元格,指出数组是全局的,所以它已经初始化为零。@juanchopanza我同意,已修复。
for (int i = 0; i < size; i++)
    for (int j = 0; j < size; j++)
        array[i][j] = 0;
for (int (&a)[100] : array) // or  for (auto &a : array)
    for (int &b : a) // or  for (auto &b : a)
        b = 0;
std::memset(array, 0, sizeof array);
a[100][100]={0};
std::memset(a, 0, sizeof a);
decltype(a) zeros{};
std::swap(a, zeros);