我已经知道如何使用 new
创建动态二维矩阵并使用 delete
释放它。由于 C++ 11 具有许多新的内存特性,例如 unique_ptr
、array
容器等;什么是创建二维矩阵的好方法,这样就不需要使用 delete
运算符显式释放矩阵?
最佳答案
最简单的方法之一是使用 vector 的 vector
const int N = 10;
const int M = 10;
vector<vector<int>> matrix2d(N, vector<int>(M, 0)); // 10x10 zero-initialized matrix
matrix2d[0][0] = 42;
您当然可以使用单个 vector 并将其包装到访问器类中
vector<int> matrix(N * M, 0) // Ditto as above, but needs stride-aware accessors
为了完整起见,我将在这里发布一个小示例
template <typename T>
class Matrix2D {
std::vector<T> data;
unsigned int sizeX, sizeY;
public:
Matrix2D (unsigned int x, unsigned int y)
: sizeX (x), sizeY (y) {
data.resize (sizeX*sizeY);
}
T& operator()(unsigned int x, unsigned int y) {
if (x >= sizeX || y>= sizeY)
throw std::out_of_range("OOB access"); // Throw something more appropriate
return data[sizeX*y + x]; // Stride-aware access
}
};
或者将您的方式与 smart pointer 结合起来.请注意 vector<vector<int>>
应谨慎使用该方法,因为 vector 彼此独立,并且没有任何强制要求它们应保持其大小固定。
关于c++ - 在 C++ 11 中创建动态二维矩阵的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32915825/