首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中初始化大型二维数组

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

Stack Overflow用户
提问于 2010-08-11 23:32:45
回答 8查看 95.7K关注 0票数 21

我希望在一个类中有静态常量二维数组。数组相对较大,但我只想初始化几个元素,其他元素可能是编译器初始化它们的值。

例如,如果一个类的定义如下:

代码语言:javascript
运行
复制
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}
};

我只对初始化标记为'7‘的元素感兴趣,如何在相同的元素上执行此操作,但使用更大尺寸的数组,如array1024

EN

Stack Overflow用户

发布于 2010-08-12 00:01:34

一个解决方案是将非常数组隐藏在某个地方,从文件或资源中加载它,然后使用常量引用来访问它。也就是说。

代码语言:javascript
运行
复制
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

typedef int Array[1024][1024];

namespace DontTouch{
    Array arr;
    void initArray(){
        for (int i = 0; i < 1024; i++)
            for (int j = 0; j < 1024; j++)
                arr[i][j] = rand() & 0xff;
    }
}

const Array &arr = DontTouch::arr;

int main(int argc, char** argv){
    DontTouch::initArray();

    //arr[4][4] = 0;//compiler error            
    for (int i = 0; i < 1024; i++){
        for (int j = 0; j < 1024; j++)
            printf(" 0x%02x", arr[i][j]);
        printf("\n");
    }

    return 0;
}

它将比脚本生成的大型数组(IMO)更具可读性。

你可以用类似于二维数组的类来做同样的事情(写起来很简单)。再次强调-在某个地方使用非常量对象,并使用常量引用来访问数据。让非常数组在一个cpp之外完全不可见应该很容易。

另一种方法是使用脚本生成数组。如果你觉得大数组很丑陋,把所有的东西都放到*.h文件中(确保它只包含在一个*.cpp文件中),这样就不会吓跑人了。编译器并不关心你在代码中写了什么,只要它在语法上是正确的。

我不认为还有其他选择。

票数 0
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3460074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档