第一个问题是,如果我将在接下来的3年里开发代码,那么开始使用c++11是一件好事吗?
如果是这样,如果我想在Lapack中使用矩阵,那么实现矩阵的“最佳”方式是什么?我的意思是,做std::vector<std::vector< Type > > Matrix并不容易与Lapack兼容。
到目前为止,我用Type* Matrix(new Type[N])存储我的矩阵( new和delete的指针形式很重要,因为数组的大小不是以5这样的数字给出的,而是一个变量)。
但是使用C++11可以使用std::array。根据这个site,这个容器似乎是最好的解决方案...你认为如何?
发布于 2015-07-13 03:53:12
这是对这个问题的很晚的回答,但是如果有人读了这篇文章,我只想指出,一个人几乎永远不应该将矩阵实现为“向量的向量”。原因是矩阵的每一行都存储在堆上的某个随机位置。这意味着矩阵操作将进行大量随机内存访问,从而导致缓存未命中,这会大大减慢实现速度。
换句话说,如果您非常关心性能,只需分配一个大小为rows * columns的array/std::array/std::vector,然后使用包装器函数将一对整数转换为数组中的相应元素。除非您需要支持像返回对矩阵的行的引用这样的东西,否则所有这些选项都应该可以很好地工作。
https://stackoverflow.com/questions/18868860
复制相似问题