您的位置:首页 > 其它

multi_array的正确(错误)用法说明

2014-09-13 22:14 316 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: