#include <boost/multi_array/extent_gen.hpp>
#include <boost/multi_array.hpp>
#include <boost/pool/pool.hpp>
#include <boost/pool/pool_alloc.hpp>
#include <boost/array.hpp>
#include <iostream>
#include <cassert>
using namespace std;
void test_multiArray()
{
//using namespace boost;
typedef boost::fast_pool_allocator<double> FastPoolAllocator;
typedef boost::multi_array<double, 3, FastPoolAllocator> Multi3Array;
//还可以设置维度的存储顺序
//Multi3Array mult3Array(boost::multi_array_types::extent_gen::extents()[3][4][5]);
//Multi3Array mult3Array(boost::extents[3][4][5]); //Right Usage
//为什么不能直接写
boost::detail::multi_array::extent_gen<3> extentgen3 = boost::detail::multi_array::extent_gen<0>()[3][4][5];
//Multi3Array mult3Array(extentgen3); //Right Usage
<span style="font-size:18px;color:#ff0000;"><strong> //???
//因为操作符顺序的关系不能写成,因为()的操作符顺序高,所以导致
//boost::detail::multi_array::extent_gen<0>()[..],[..]没有先解析
//<em><u>Multi3Array mult3Array(boost::detail::multi_array::extent_gen<0>()[3][4][5]); //Error Usage</u></em>
Multi3Array mult3Array((boost::detail::multi_array::extent_gen<0>()[3][4][5])); //Right Usage</strong></span>
int nDims = mult3Array.num_dimensions();
assert((mult3Array.num_dimensions() == 3));
assert((mult3Array.num_elements() == 3*4*5));
int sz = mult3Array.size();
//可以通过ListExtend来扩展
boost::array<unsigned,3> dimArray = {3, 4, 5};
Multi3Array mutl3Array2(dimArray);
assert(mutl3Array2.num_elements() == mult3Array.num_elements());
}
int _tmain(int argc, _TCHAR* argv[])
{
test_multiArray();
getchar();
return 0;
}
multi_array的正确(错误)用法说明
最新推荐文章于 2021-12-21 15:28:49 发布