c++ - 在 C++ 中创建矩阵的正确方法

标签 c++ data-structures stl graph matrix

我想为图创建一个邻接矩阵。因为我读过使用 matrix[x][y] 形式的数组是不安全的。因为他们不检查范围,所以我决定使用 STL 的 vector 模板类。我需要在矩阵中存储的只是 bool 值。所以我的问题是,如果使用 std::vector<std::vector<bool>* >*产生过多的开销,或者是否有更简单的矩阵方法以及如何正确初始化它。

编辑:非常感谢您的快速回答。我刚刚意识到,我当然不需要任何指针。矩阵的大小将在开始时初始化,直到程序结束才会改变。这是一个学校项目,所以如果我写“好”的代码会很好,尽管技术上的性能并不是太重要。使用 STL 很好。使用诸如 boost 之类的东西可能不受欢迎。

最佳答案

请注意,您也可以使用 boost.ublas用于矩阵创建和操作以及boost.graph以多种方式表示和操作图形,以及对它们使用算法等。

编辑:无论如何,为你的目的做一个 vector 的范围检查版本并不是一件难事:

template <typename T>
class BoundsMatrix
{
        std::vector<T> inner_;
        unsigned int dimx_, dimy_;

public:
        BoundsMatrix (unsigned int dimx, unsigned int dimy)
                : dimx_ (dimx), dimy_ (dimy)
        {
                inner_.resize (dimx_*dimy_);
        }

        T& operator()(unsigned int x, unsigned int y)
        {
                if (x >= dimx_ || y>= dimy_)
                        throw std::out_of_range("matrix indices out of range"); // ouch
                return inner_[dimx_*y + x];
        }
};

请注意,您还需要添加 const 版本的运算符和/或迭代器,以及异常的奇怪用法,但您明白了。

关于c++ - 在 C++ 中创建矩阵的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/618511/

相关文章:

java - 如何修复自定义双链表上的无限循环?

java - 关联数组的实现

c++ - 类似的字符串算法

C++:这是使用整数变量作为函数调用指针的正确方法吗?

c++ - C++ 中命名空间中的变量声明

c - 初始化包含指向其自身类型的指针的常量结构

c++ - 具有用户定义函数的输出 vector

c++ - 有没有办法强制使用shared_ptr在堆上创建对象?

c++ - 在使用 std::stod 之前初始化 QApplication 的奇怪错误

c++ - FlannBasedMatcher::match 中的掩码无法正常工作