我的问题与Boost.MultiArray类有关。我了解如何将multi_array
对象转换为array_view
对象,如以下代码所示:
int my_row = 5;
int my_col = 7;
boost::multi_array<int,2> my_matrix(boost::extents[my_row][my_col]);
int *b = new int [my_row*my_col];
int loop = 0;
for(int i=0; i<my_row; i++)
{
for(int j=0; j<my_col; j++)
{
loop = loop+1;
my_matrix[i][j]=loop;
}
}
std::cout<<"The matrix"<<std::endl;
for (int i=0; i<my_row; i++)
{
for(int j=0; j<my_col; j++)
std::cout<<my_matrix[i][j]<<" ";
std::cout<<std::endl;
}
int new_row = 3;
int new_col = 4;
boost::multi_array<int,2>::array_view<2>::type my_view =
my_matrix[boost::indices
[boost::multi_array<int,2>::index_range(0,new_row,1)]
[boost::multi_array<int,2>::index_range(0,new_col,1)]
];
std::cout<<"The view"<<std::endl;
for (int i=0; i<new_row; i++)
{
for(int j=0; j<new_col; j++)
std::cout<<my_view[i][j]<<" ";
std::cout<<std::endl;
}
我的问题是,因为array_view
对象与multi_array
对象非常相似,有没有办法将array_view
对象转换为multi_array
对象?
答案 0 :(得分:2)
boost::multi_array
这些构造函数采用array_view
:
multi_array(const const_array_view<NumDims>::type& x);
multi_array(const array_view<NumDims>::type& x);
您可以使用以下代码从multi_array
构建array_view
:
boost::multi_array<int,2> array_from_view(my_view);
请注意,新的multi_array
与视图和原始数组具有单独的存储空间。