如何在C+中动态创建新的二维数组+; 如何在C++中创建新的2D数组? 下面的代码工作得不太好 int** t = new *int[3]; for(int i = 0; i < 3; i++) t[i] = new int[5]; int**t=new*int[3]; 对于(int i=0;i=m_行) 抛出_范围(“矩阵-行索引超出范围”); 如果(列>=m_列) 抛出_范围(“矩阵-列索引超出范围”); 返回列+行*m_列; } }; 这很接近,但更可取。什么是“不太好用”?为什么不在另一个std::vector中使用std::vector?这个问题已经被问了很多次了。使用向量。。。胡说八道。我希望这样能自动检测潜在的重复,并要求在每个问题之前确认(如果有潜在的DUPS)。+ 1,我希望我能再次投票来解决问题而不是重新发明轮子。在生产质量C++代码中,我会使用一个健壮的RAII容器,比如std::vector,而不是使用new[]分配的原始类C数组,除非有充分的理由这样做。Java会工作得更好,但不幸的是不能使用它;)只是好奇你为什么不能用std的向量?它是任何C++版本的一部分。 1D array index = column + row * columns count 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; } };

如何在C+中动态创建新的二维数组+; 如何在C++中创建新的2D数组? 下面的代码工作得不太好 int** t = new *int[3]; for(int i = 0; i < 3; i++) t[i] = new int[5]; int**t=new*int[3]; 对于(int i=0;i=m_行) 抛出_范围(“矩阵-行索引超出范围”); 如果(列>=m_列) 抛出_范围(“矩阵-列索引超出范围”); 返回列+行*m_列; } }; 这很接近,但更可取。什么是“不太好用”?为什么不在另一个std::vector中使用std::vector?这个问题已经被问了很多次了。使用向量。。。胡说八道。我希望这样能自动检测潜在的重复,并要求在每个问题之前确认(如果有潜在的DUPS)。+ 1,我希望我能再次投票来解决问题而不是重新发明轮子。在生产质量C++代码中,我会使用一个健壮的RAII容器,比如std::vector,而不是使用new[]分配的原始类C数组,除非有充分的理由这样做。Java会工作得更好,但不幸的是不能使用它;)只是好奇你为什么不能用std的向量?它是任何C++版本的一部分。 1D array index = column + row * columns count 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; } };,c++,dynamic,multidimensional-array,C++,Dynamic,Multidimensional Array,您的*位置不正确。尝试: int **t = new int *[3]; vector以获得适当的矩阵元素访问): 模板 类矩阵{ 公众: 矩阵(大小行、大小列) :m_数据(行*列)、m_行(行)、m_列(列){} size_t Rows()常量{返回m_Rows;} size_t Columns()常量{return m_Columns;} 常量T&运算符()(行大小、列大小)常量{ 返回m_数据[向量索引(行、列)]; } 运算符()(行大小、列大小){ 返回m_数据[向量索引(行、列)

您的
*
位置不正确。尝试:

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

vector
有效吗?

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

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

您可以将它封装在一个方便的C++类中(重载<代码>操作程序)(<代码> >以获得适当的矩阵元素访问):

模板
类矩阵{
公众:
矩阵(大小行、大小列)
:m_数据(行*列)、m_行(行)、m_列(列){}
size_t Rows()常量{返回m_Rows;}
size_t Columns()常量{return m_Columns;}
常量T&运算符()(行大小、列大小)常量{
返回m_数据[向量索引(行、列)];
}
运算符()(行大小、列大小){
返回m_数据[向量索引(行、列)];
}
私人:
向量m_数据;
行的大小;
列的大小;
大小向量索引(大小行、大小列)常量{
如果(行>=m_行)
抛出_范围(“矩阵-行索引超出范围”);
如果(列>=m_列)
抛出_范围(“矩阵-列索引超出范围”);
返回列+行*m_列;
}
};

这很接近,但更可取。什么是“不太好用”?为什么不在另一个
std::vector
中使用
std::vector
?这个问题已经被问了很多次了。使用向量。。。胡说八道。我希望这样能自动检测潜在的重复,并要求在每个问题之前确认(如果有潜在的DUPS)。+ 1,我希望我能再次投票来解决问题而不是重新发明轮子。在生产质量C++代码中,我会使用一个健壮的RAII容器,比如
std::vector
,而不是使用
new[]
分配的原始类C数组,除非有充分的理由这样做。Java会工作得更好,但不幸的是不能使用它;)只是好奇你为什么不能用std的向量?它是任何C++版本的一部分。
1D array index = column + row * columns count
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;
    }
};