【问题标题】:declare an array with value声明一个有值的数组
【发布时间】:2012-07-17 14:04:04
【问题描述】:

我正在用 C++ 编写一个程序,我试图用值声明一个数组,但只有这个值只设置为数组中的第一个成员。

char mines[100][100] = {'0'};

【问题讨论】:

  • 我不太确定你想问什么。您是想将 mines 数组的每个成员都设置为 0,还是想将第 100 个元素的第 100 个成员设置为 0?
  • 以这种方式使用的初始化器列表将专门设置所有包含的值,所有未包含的都将初始化为0。

标签: c++ multidimensional-array initialization


【解决方案1】:

在每个维度上使用std::fill

for (int i = 0; i < 100; ++i)
    std::fill (mines[i], mines[i] + 100, '0');

或者在 C++11 中:

for (auto &chars : mines)
    std::fill (std::begin (chars), std::end (chars), '0');

更简单的是,利用数组是连续的这一事实,您可以为自己省去循环:

std::fill (mines, mines + 100*100, '0');

正如 Shahbaz 指出的那样,要消除那里的神奇数字,请将 mines + 100*100 替换为 sizeof(mines)

【讨论】:

    【解决方案2】:

    如果您不想编写或生成包含 10000 个元素的初始化列表,您可以这样做:

    char mines[100][100];
    memset(mines, '0', sizeof(mines));
    

    【讨论】:

    • 好点,我一直忘记这些东西是连续的,出于某种原因。
    • 嗯,它们是 0,而不是 '0'。也许就是这样。
    • @chris 不,这是因为我使用 memcpy 而不是 memset :) 嗯...幸好我很快就注意到了。
    • @Rob 感谢编辑,我以为他希望数组归零。
    • 是的,但是如果 Luna 想要数组归零,那根本不会有任何问题,因为在最后一个初始化元素之后,所有数组元素都会自动发生这种情况。
    【解决方案3】:

    我通常使用 for 循环来初始化所有值。据我所知,您只能通过列表进行初始化,而不是所有元素的默认值。

    【讨论】:

    • 是的,我正在尝试和这个问题一样,使用循环会使程序运行速度变慢
    【解决方案4】:

    你只会初始化第一个元素

    char mines[100][100] = {'0'};
    

    其余部分将使用0(值而不是字符)初始化,您将需要一个循环。像这样:

    int row, column;
    for (row = 0; row < 100; row++)
        for (column = 0; column < 100; column++)
            mines[row][column] = '0';
    

    【讨论】:

    • 我知道这个解决方案,但它会使程序变慢
    • 为什么?这应该是最快的方法之一。
    【解决方案5】:

    Luna,这称为零初始化器,仅用于将所有值初始化为零对应值:空指针,零。如果您尝试将 char 初始化为 0,它将起作用,但任何其他值都不会。

    更多信息here

    #include <iostream>
    
    int main(int argc, char *argv[])
    {
        int value[2][2] = {0};
    
        for(int i = 0; i < 2; ++i)
           for (int j = 0; j < 2; ++j)
               std::cout << (value[i][j] == 0) << std::endl;
    
        return 0;
    }
    

    输出:

    1 1 1 1

    如果你需要用特定的值进行初始化,我认为 Luchian 有 memset 的最佳解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2012-10-19
      • 2012-10-04
      • 2014-02-02
      相关资源
      最近更新 更多