首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用新运算符在C++中创建多维数组的简单方法

使用新运算符在C++中创建多维数组的简单方法
EN

Stack Overflow用户
提问于 2020-05-12 22:49:34
回答 3查看 79关注 0票数 0

我需要在C++代码中创建很多小的二维数组.问题是,创建一个简单的数组需要做大量的工作:

代码语言:javascript
复制
new int* [2]{
            new int[2]{9, 9},
            new int[2]{25, 19}
    };

有什么更好的方法吗?我想避免写“新int[].”每次都是。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-12 23:36:28

如果在运行时没有确定维度,并且所有内部数组都具有相同的维度,则这里不需要动态分配。

只需声明一个数组:

代码语言:javascript
复制
int myArray[2][2] = {
   {9, 9},
   {25, 19}
};

就这样!

票数 4
EN

Stack Overflow用户

发布于 2020-05-12 22:58:30

我建议将其分配为一维数组。然后,您可以将该一维数组视为一个2D数组:

代码语言:javascript
复制
const unsigned int MAX_ROWS = 2U;
const unsigned int MAX_COLUMNS = 5U;
int example_array[MAX_ROWS * MAX_COLUMNS];
//  Get value at [row][column]:
unsigned int one_dim_index = (row * MAX_COLUMNS) + column;
int value = example_array[one_dim_index];

对于小数组大小,这将是更有效的,因为处理器可以适应数据缓存中的整个连续数组。使用您的解决方案,一个指针数组,您不知道子数组位于何处,并且它们可能不是连续的(因此需要重新获取到缓存中)。

编辑1:初始化

您可以通过使行和列变得漂亮来初始化数组:

代码语言:javascript
复制
int example_array[MAX_ROWS * MAX_COLUMNS] =
{
    /* row 0 */ 1, 2, 3, 4, 5,
    /* row 1 */ 6, 7, 8, 9, 10,
};
票数 3
EN

Stack Overflow用户

发布于 2020-05-12 23:24:00

也许您可以使用嵌套的for循环来执行任务。

代码语言:javascript
复制
const int ARRAY_SIZE = 2;

int **create_array() {

  int **array = new int*[ARRAY_SIZE];
  if (array == nullptr) { return nullptr; }

  for (int i=0; i<ARRAY_SIZE; i++) {
    array[i] = new int[ARRAY_SIZE];
    if (array[i] == nullptr) { return nullptr; }
  }
  return array;
}

如果你想通过这些值,你可以直接在这里做它。但它们应该来自于i的函数。如果您想要一些真正特定的值,则需要手动操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61763319

复制
相关文章

相似问题

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