Нужно сделать приблизительно такое:
for(Matrix::iterator row = matrix.begin(); row != matrix.end(); row++)
for(Matrix::Row::iterator col = row->begin(); col != row->end(); col++)
myStream << *col;
Развесисто и непереиспользуемо (нужно всегда копировать эти строки,
если хочется сделать что-нибудь другое с элементами матрицы.
Сильно подозреваю, что где-то рядом кроется изящный приём типа
boost::bind, позволивший бы сделать это одним махом, без итераторов
и циклов.
Например, такое приходит в голову:
std::for_each(
matrix.begin(),
matrix.end(),
boost::bind(
&std::for_each,
_1.begin(),
_2.end,
some_operator
)
);
Ясно, что работать оно не будет, ибо в boost::arg<> нет никаких
begin() и end().
Или такое:
std::for_each(
matrix.begin(),
matrix.end(),
boost::bind(
&std::for_each,
boost::bind(&Matrix::Row::begin, _1),
boost::bind(&Matrix::Row::end, _2),
some_operator
)
);
Тоже не годится, потому что два промежуточных параметра внешнего
bind должны быть определены объектом типа boost::arg<>.
Вот что бы такое придумать, чтобы было столь же красиво и работало? :)


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум размер STL вектора (2003)
- Форум [stl][c++]Двумерный массив (2010)
- Форум Использование boost (2005)
- Форум stl контейнеры и boost smart pointers (2014)
- Форум двумерный массив (2013)
- Форум STL (2004)
- Форум stl (2003)
- Форум Как расковырять вектор векторов? (2011)
- Форум Ищу. Удалённая. C++/stl/boost/posix sockets/multithreading (2010)
- Форум Ищу. Удалённая. C++/stl/boost/posix sockets/multithreading (2010)