Как пройти повышение::multi_array
Я искал библиотеку boost::multi_array в поисках итератора, который позволяет обойти весь multi_array за один цикл for.
Я не думаю, что в этой библиотеке есть такой итератор. (Найденные там итераторы позволяют пройти через одно измерение multi_array)
Я ошибся?
Если нет, то есть ли библиотека, которая определяет такой итератор?
Вводя в детали, я хотел бы написать что-то вроде:
boost::multi_array< double, 3 > ma(boost::extents[3][4][2]);
for( my_iterator it = ma.begin(); it != ma.end(); ++it )
{
// do something
// here *it has element type (in this case double)
}
и получить цикл, который повторяется 3x4x2 раза
1 ответ
Вы можете использовать реализацию std::for_each
от <algorithm>
чтобы получить доступ к каждому отдельному элементу. Есть пример в документации Boost
Кроме того, вы можете использовать array::origin()
а также array::num_elements()
следующее:
boost::multi_array< double, 3 > ma(boost::extents[3][4][2]);
for(auto i = ma.origin(); i < (ma.origin() + ma.num_elements()); ++i)
{
// do something with i
}