使用C ++中的参数大小创建2D数组

时间:2017-04-21 22:17:48

标签: c++ arrays

我正在尝试创建一个简单的2D数组,其大小是该方法传递的参数。在C#中我们会有这样的东西:

float[,] GenerateNoiseMap(int mapWidth, int mapHeight){
     float noiseMap[,] = new float[mapWidth, mapHeight];
     return noiseMap;
}

知道如何创建2D数组并在C ++中返回它吗? 到目前为止,编译器给我一个错误,大小必须是一个常量值,我希望值是方法参数的

3 个答案:

答案 0 :(得分:4)

我喜欢围绕一维矢量的简单包装:

#include <vector>

class Matrix
{
private:
    size_t rows, columns;
    std::vector<double> matrix;
public:
    Matrix(size_t numrows, size_t numcols) :
            rows(numrows), columns(numcols), matrix(rows * columns)
    {
    }

    double & operator()(size_t row, size_t column)
    {
        return matrix[row * columns + column]; // note 2D coordinates are flattened to 1D
    }

    double operator()(size_t row, size_t column) const
    {
        return matrix[row * columns + column];
    }

    size_t getRows() const
    {
        return rows;
    }
    size_t getColumns() const
    {
        return columns;
    }
};

Documentation for std::vector

用法:

Matrix noiseMap(mapWidth, mapHeight);

答案 1 :(得分:3)

在C ++中,您不能在两个维度上都拥有具有动态大小的2D C类数组。 C#数组看起来有点像它们,但它们根本不是一回事。

我建议boost::multi_array

#include <boost/multi_array.hpp>

boost::multi_array<float, 2> GenerateNoiseMap(int mapWidth, int mapHeight) {
    return boost::multi_array<float, 2>{boost::extents[mapWidth][mapHeight]};
}

答案 2 :(得分:1)

float ** create_matrix(size_t m, size_t n)
{
    float ** answer = new float*[m];
    for (size_t i =0; i < m; i++)
        answer[i] = new float[n];
    return answer;
}