Как пройти повышение::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
}  
Другие вопросы по тегам