使用新运算符C++创建多维数组的简单方法
Easy way to create multiple-dimension arrays in C++ with new operator
我需要在C++代码中创建很多小的二维数组。 问题是,即使是创建一个简单的数组也需要做很多工作:
new int* [2]{
new int[2]{9, 9},
new int[2]{25, 19}
};
有没有更好的方法可以做到这一点? 我想避免写"new int[]..."每次。
如果在运行时未确定维度,并且所有内部数组都具有相同的维度,则此处不需要动态分配。
只需声明一个数组:
int myArray[2][2] = {
{9, 9},
{25, 19}
};
就是这样!
我建议分配为单维数组。 然后,您可以将 1D 数组视为 2D 数组:
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:初始化
您可以通过使行和列漂亮来初始化数组:
int example_array[MAX_ROWS * MAX_COLUMNS] =
{
/* row 0 */ 1, 2, 3, 4, 5,
/* row 1 */ 6, 7, 8, 9, 10,
};
也许你可以使用嵌套的 for 循环来完成任务
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 的函数。如果你想要一些非常具体的值,它需要是一个手动作业
相关文章:
- 在c++中用vector填充一个简单的动态数组
- 显示错误输出的简单数组排序程序
- 使用新运算符C++创建多维数组的简单方法
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- 使用简单的暴力算法找到数组中最大的4个元素
- 我写了这个简单的代码,应该计算一系列数组元素的最高数量,但结果很奇怪
- 如何在特征中对二维数组的列执行简单的算术运算
- C 中的简单动态数组
- 为什么我们使用指针而不是简单地创建特定尺寸的数组
- 简单的比赛游戏与 C++ 中的动态数组
- 简单的2D数组标头文件,打印失败
- 添加简单数组的内容
- 获取 std::array 底层数组内存大小的最简单方法?
- 简单的C++字符数组加密功能 - 段故障
- 将简单的 Java 数组传递给原始的 C 数组 SWIG
- 为什么对于简单的数组复制来说,没有多线程加速
- 在C++中对二维数组进行快速简单的矩阵运算
- 简单的数组排序/检查 划分和征服版本
- C++用户将数据输入 2D 数组的最简单方法是什么?
- 从C++数组调用信息看似简单的问题