c++ - 在 C++ 11 中创建动态二维矩阵的好方法

标签 c++ c++11

我已经知道如何使用 new 创建动态二维矩阵并使用 delete 释放它。由于 C++ 11 具有许多新的内存特性,例如 unique_ptrarray 容器等;什么是创建二维矩阵的好方法,这样就不需要使用 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
    }
};

Live Example

或者将您的方式与 smart pointer 结合起来.请注意 vector<vector<int>>应谨慎使用该方法,因为 vector 彼此独立,并且没有任何强制要求它们应保持其大小固定。

关于c++ - 在 C++ 11 中创建动态二维矩阵的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32915825/

相关文章:

c++ - "Want Speed? Pass by value"有多真实

c++ - 从可变参数模板创建实例

c++ - 如何自动生成c/c++函数原型(prototype)?

c++ - GDB:我们如何从 std::tuple 中提取值

c++ - 使用 { }, { } 将多个 std::pair 传递给可变参数模板构造函数

c++ - 一个类只能继承一次

c++ - 标准 C++ 中是否有固定宽度的 bool 类型?

c++ - 绘制三角形不起作用 : I just see a black screen and my mouse

c++ - 将 boost 套接字放入 std::map

multithreading - 在等待通知std::condition_variable的过程中执行 “wait callback”