c++ - 不递归分配多维数组

标签 c++ arrays

假设我有一个任意大小的整数值数组,指定要分配的数组的每个维度(级别)的元素数,我如何在不诉诸递归的情况下分配数组?最好在没有递归的情况下执行此操作以避免堆栈溢出。

那么,例如,如何完成这样一个功能:

template <typename Type>
void* allocMulti (int numDim, int* numElementsPerDim)
{
    // 'Type' if one-dimensional, should be 'void*' otherwise
    void* multiArray = new Type[numElementsPerDim[0]];
    // ...
    return multiArray;
}

我正在寻找一种通用算法,它可以涵盖没有直接内存访问的语言。

最佳答案

如果数组实际上是一个矩阵(例如长度为 AxB 而不是不同长度的数组列表),那么您可以分配一个长度为 A*B 的数组而不是长度为 A 的数组,其中每个位置都是一个指针到长度为 B 的数组。

这也可以提高性能,因为内存是连续的(更少的分页)。

虽然(假设 dim(a,0) = A 和 dim(a,1) = B.

我的 C++ 有点生疏,但是,我相信这种方法可能有效:

T* AllocateMatrix(int dims, int[] dimLengths)
{
    // Assert dims >= 1
    int length = dims[0];

    for (int d = 1; d < dims; d++)
        length *= dims[d];

    return new T[length];
}

*T AccessMatrix(T* matrix, int dims, int[] dimLengths, int[] pos)
{
    // Assert dims >= 1
    int p = pos[0];

    for (int d = 1; d < dims; d++)
    {
        p = p * dimLengths[d] + pos[d];
    }

    return &matrix[p];
}

关于c++ - 不递归分配多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19431068/

相关文章:

c++ - 如何将 MATLAB 图像处理库内置函数转换为 matlab coder 代码生成不支持的 c++?

c++ - 使用一个函数交换两个不同类中的指针

c++ - 从 string 到 char[] 的转换如何让它变长?

c - 错误 : assignment makes integer from pointer without a cast (using gets)

javascript - 将具有父 ID 的对象数组转换为嵌套树结构

c++ - Eclipse cdt,基于类接口(interface)C++排序src实现

c++ - 在保持顺序的同时从 vector 中删除重复的成员

c++ - 枚举名称作为函数

java - 如何将单个对象分配给所选微调器项中的字符串变量

C++ 将新类对象添加到数组中的新位置