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);