1

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

4

1 回答 1

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的存储与视图和原始数组分开。

于 2013-06-21T14:56:11.447 回答