1

我正在寻找一种使用 STL 容器(例如,std::vector)来获得在内存中连续的 Matrix 变量(即,一堆有序的列向量)的方法。一种选择是:

vector< vector<float> > mat;
mat.push_back (column1); // column1 is of type vector<float> 
mat.push_back (column2); // column2 is of type vector<float>

&mat[1][0]这在不等于的意义上是不连续的&mat[0][N-1] + 1,其中N是 的长度column1

另一种选择是:

vector< float > mat;
float f1[] = {1., 2., 3.};
float f2[] = {4., 5., 6.};
mat.insert (mat.end (), f1, f1 + 3);
mat.insert (mat.end (), f2, f2 + 3);

这在内存中是连续的,但强制我使用浮点数组。

编辑

为了清楚起见,我更喜欢类似的选项vector < vector<float> >,因此我可以将给定的列作为 STL 向量访问。

4

5 回答 5

3

我会编写自己的矩阵类,它使用 astd::vector<float>作为存储的后端。

于 2012-04-05T09:03:37.763 回答
2

据我所知,你不能用标准库简单地做到这一点,但你总是可以使用 Boost 的多维数组

于 2012-04-05T09:10:39.500 回答
2

子类 a vector<float>。制作尺寸rowSize*colSize。内存是连续的,因为它是一个单一的向量。

对于将列作为向量访问的部分,请考虑使用两个迭代器访问列以标记列的范围。修改列上的算法以使用RandomAccessIterator符合标准的迭代器,或者使用一个Column类来包装两个迭代器,该类从T& operator[](size_t).

于 2012-04-05T09:13:02.447 回答
2

为了确保数据确实是连续的,我认为您需要将其基于单个数组类型对象,根据您的要求具有静态或动态大小,并负责所有簿记和访问。看看提升矩阵。不久前,我研究了静态大小的矩阵,尽管我不建议您使用这些东西,但它是一个(老式)如何完成的示例。

于 2012-04-05T09:21:35.133 回答
0

看看是否对您有帮助(如果您想要以列为主的存储,您可能必须修改源代码)。

于 2012-04-05T09:12:29.683 回答