我想了解如何使用 boost::multi_array 提供的视图功能。具体来说,我希望能够在单个循环中迭代表示初始矩阵的特定子矩阵(不一定是连续的)的视图的所有元素。似乎提供的迭代器不会做我想要的(或任何事情,它不会编译)。
在下面的例子中,我有一个 2x6 矩阵,我想得到它的 2x4 子矩阵,所以如果我尝试打印它,我希望得到“BoosLion”。事实上,如果我对每个维度进行迭代,情况就是如此。但是当我尝试使用单个迭代器进行迭代时,程序将无法编译。
#include <boost/multi_array.hpp>
#include <iostream>
int main()
{
boost::multi_array<char, 2> a{boost::extents[2][6]};
a[0][0] = 'B';
a[0][1] = 'o';
a[0][2] = 'o';
a[0][3] = 's';
a[0][4] = 't';
a[0][5] = '\0';
a[1][0] = 'L';
a[1][1] = 'i';
a[1][2] = 'o';
a[1][3] = 'n';
a[1][4] = 's';
a[1][5] = '\0';
typedef boost::multi_array<char, 2>::array_view<2>::type array_view;
typedef boost::multi_array_types::index_range range;
array_view b = a[boost::indices[range{0,2}][range{0,4}] ];
for (unsigned int i = 0; i < 2; i++ ) {
for (unsigned int j = 0; j < 4; j++ ) {
std::cout << b[i][j] << std::endl;
}
}
// I want to do something like this:
// for (auto itr = b.begin(); itr < b.end(); ++itr) {
// std::cout << *itr << std::endl;
// }
}
有谁知道如何只用一个循环进行迭代?我尝试搜索文档,但找不到任何相关内容。另外,如果有人知道可以做到这一点的另一个图书馆,请告诉我,谢谢!