как пройти повышение :: multi_array - PullRequest
7 голосов
/ 07 апреля 2011

Я искал библиотеку 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 Ответ

10 голосов
/ 07 апреля 2011

Вы можете использовать реализацию 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
}  
...