现在的位置: 首页 > 综合 > 正文

boost multiple array

2013年12月02日 ⁄ 综合 ⁄ 共 529字 ⁄ 字号 评论关闭

最近在整理代码,因为项目的原因,有很多矩阵的科学计算,我们一直使用二维数组来表示矩阵,如果是静态的没有任何问题,比如

complex<float> array[m][n];

但是当需要用到动态数组,比如要在class保持一个指针,那分配内存会很麻烦,要分步来new。

complex<float>** array = new complex<float>*[m];
for(int i=0; i<n; ++n)
    array[i] = new complex<float>[n];

但是这个有两个不太好的地方,第一就是过多的调用new,效率比较低。第二就是代码很冗余。

那这时我选择了boost的multiple array,这个array用起来很简单,

boost::multi_array* array = new boost::multi_array(boost::extents[m][n]);

另外他还有三个不得不提的好处,第一就是可以制定在内存中的排列方式,是行优先还是列优先。比如C就是行优先,那fortran就是列优先。第二就是可以自己制定base,比如C的数组都是从0开始的,而fortran的就是从1开始的。最后他可以自己截取出一个view,这个因为现在还没有什么需求,所以就没有什么体会。

抱歉!评论已关闭.