Boost.MultiArray中multi_array和array_view之间的转换

时间:2013-06-20 09:29:41

标签: c++ boost

我的问题与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对象?

1 个答案:

答案 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与视图和原始数组具有单独的存储空间。