Boost.MultiArray是一个动态多维数组库。它实现了一个通用、与标准库的容器一致的接口,并且具有与C++中内建的多维数组一样的接口和行为。
简短的例子
- #include "boost/multi_array.hpp"
- #include <cassert>
- int main () {
- // 创建一个 3 x 4 x 2 的 3D 数组
- typedef boost::multi_array<double, 3> array_type;
- typedef array_type::index index;
- array_type myarray(boost::extents[3][4][2]);
- // 赋值到数组的元素
- int values = 0;
- for(index i = 0; i != 3; ++i)
- for(index j = 0; j != 4; ++j)
- for(index k = 0; k != 2; ++k)
- myarray[i][j][k] = values++;
- // 校验元素值
- int verify = 0;
- for(index i = 0; i != 3; ++i)
- for(index j = 0; j != 4; ++j)
- for(index k = 0; k != 2; ++k)
- assert(myarray[i][j][k] == verify++);
- return 0;
- }
- boost::multi_array是一个模板类,第一个模板参数指定元素数据类型;第二个模板参数是一个数值,指出数组维度。
- multi_array::index类型定义用于描述数据索引,一般来说它就是int
- boost:: extents的连续多个[]操作用于指明每个维度的大小(另外,也可以使用boost::array来指明维度大小,如boost:: array<int,3> dims={ 3,4,2}; array_type myarray(dims);)
- boost::multi_array的读写接口和原生多维数组相同
把连续内存适配成多维数组
- /* 原来的代码
- typedef boost::multi_array<double, 3> array_type;
- typedef array_type::index index;
- array_type myarray(boost::extents[3][4][2]);
- */
- typedef boost::multi_array_ref<double, 3> array_type;
- typedef array_type::index index;
- double buf[24]; //连续内存块