在C++中初始化大型二维数组

Mat*_*ock 18 c++ arrays

我想在一个类中有静态常量二维数组.数组相对较大,但我只想初始化一些元素,而其他元素可能是编译器初始化它们的任何东西.

例如,如果类定义如下:

class A {
public:
  static int const test[10][10];
};

int const A::test[10][10] = {
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
Run Code Online (Sandbox Code Playgroud)

我只对初始化标有'7'的元素感兴趣,我如何在相同的元素上执行此操作,但是使用较大的数组,如数组[1024] [1024]?

Jam*_*ran 32

初始化的数组的任何部分,超出初始化,初始化为0.因此:

int const A::test[10][10];           // uninitialized

int const A::test[10][10] = { {0} }; // all elements initialized to 0.

int const A::test[10][10] = {1,2};   // test[0][0] ==1, test[0][1]==2, rest==0
Run Code Online (Sandbox Code Playgroud)

这意味着您必须初始化的所有内容都是最后一个非零:

int const A::test[10][10] = { 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0}, 
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0}, 
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0}, 
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0}
};
Run Code Online (Sandbox Code Playgroud)

它不是最好的解决方案,但可以节省一些工作.

  • 另外,因为我们不需要编写我们不感兴趣的元素,例如:int const A :: test [10] [10] = {{},{},{},{0,0,0, 7,7,7,7},{0,0,0,7,7,7,7},{0,0,0,7,7,7,7},{0,0,0,7, 7,7,7}} (4认同)

C J*_*son 7

在初始化之后,无法将const数组分配给const数组.所以你必须编写脚本:

并以这种方式包含您的文件:

class A {
public:
    static const int test[10][10];
};

const int A::test[10][10] = {
#include "data.inc" // points to the file generated by script.
};
Run Code Online (Sandbox Code Playgroud)