我想为图创建一个邻接矩阵。因为我读过使用 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/