4

件名のように、C ++で新しい2D配列を作成するにはどうすればよいですか?以下のこのコードはうまく機能しません。

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

3 に答える 3

7

あなたは*間違った場所にいます。試す:

int **t = new int *[3];
于 2013-02-01T18:29:40.673 に答える
3

動作しますかvector< vector< int > >

于 2013-02-01T18:30:08.563 に答える
0

2D行列を1D配列に「フラット化」して、その要素を次のような便利なコンテナに格納することstd::vectorもできます(これは、を使用するよりも効率的ですvector<vector<T>>)。(row, column)次に、2Dマトリックスインデックスを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;
    }
};
于 2013-02-01T18:48:27.043 に答える