如何在C ++中动态创建新的2D数组

时间:2013-02-01 18:26:36

标签: c++ dynamic multidimensional-array

在主题中如何在C ++中创建新的2D数组? 下面的代码不能很好地运作。

int** t = new *int[3];
for(int i = 0; i < 3; i++)
       t[i] = new int[5];

3 个答案:

答案 0 :(得分:7)

你错误的地方有一个*。尝试:

int **t = new int *[3];

答案 1 :(得分:2)

vector< vector< int > >会有效吗?

答案 2 :(得分:0)

您可能希望将2D矩阵“展平”为一维数组,将其元素存储在方便的容器中,如std::vector(这比使用vector<vector<T>>更有效)。然后,您可以将2D (row, column)矩阵索引映射到1D数组索引。

如果将元素按行存储在矩阵中,则可以使用如下公式:

1D array index = column + row * columns count

您可以将它包装在方便的C ++类中(重载operator()以获得正确的矩阵元素访问):

template <typename T>
class Matrix {
public: 
    Matrix(size_t rows, size_t columns)
        : m_data(rows * columns), m_rows(rows), m_columns(columns) {}

    size_t Rows() const { return m_rows; }

    size_t Columns() const { return m_columns; }

    const T & operator()(size_t row, size_t column) const { 
        return m_data[VectorIndex(row, column)];
    }

    T & operator()(size_t row, size_t column) {
        return m_data[VectorIndex(row, column)];
    }

private:
    vector<T> m_data;
    size_t m_rows;    
    size_t m_columns; 

    size_t VectorIndex(size_t row, size_t column) const {
        if (row >= m_rows)
            throw out_of_range("Matrix<T> - Row index out of bound.");
        if (column >= m_columns)
            throw out_of_range("Matrix<T> - Column index out of bound.");           
        return column + row*m_columns;
    }
};