如何在C++中动态创建新的 2D 数组
How create dynamically new 2D array in 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];
vector< vector< int > >
行吗?
您可能希望将 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;
}
};
相关文章:
- 2D数组来自文本输入,中间有空格
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 获取 2D 数组 c++ 中的所有数字对
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 使用指针算法修改函数中的 2D 数组
- 在C++中初始化和打印 2D 数组
- 有没有办法使用输入的维度初始化 2d 数组中的所有项目而不循环C++?
- C++ 2D 数组写入多个位置
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 如何从initializer_list初始化 2D 数组
- 交换函数不是在 C++ 中交换 2D 数组的元素