我想为图创建一个邻接矩阵。因为我读过,使用以下形式的数组是不安全的matrix[x][y]
因为它们不检查范围,所以我决定使用 stl 的向量模板类。我需要在矩阵中存储的只是布尔值。所以我的问题是,如果使用std::vector<std::vector<bool>* >*
产生太多的开销,或者是否有一种更简单的矩阵方法以及如何正确初始化它。
编辑:非常感谢您的快速回答。我刚刚意识到,我当然不需要任何指示。矩阵的大小将在开始时初始化,直到程序结束才会改变。这是一个学校项目,所以如果我编写“好的”代码就好了,尽管技术上的性能并不是太重要。使用STL就可以了。使用像 boost 这样的东西可能不会被赞赏。
请注意,您也可以使用增强ublas用于矩阵创建和操作以及升压图以多种方式表示和操作图形,以及对它们使用算法等。
Edit:无论如何,为您的目的做一个向量的范围检查版本并不是一件难事:
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 版本的运算符和/或迭代器,以及异常的奇怪使用,但您明白了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)