На тему того, как навешивание функциональности без связи с изначальными концепциями может убить идею.
Вот занятный вопрос нашел. Он мне чисто академически интересен был. В моем наивном изложении он звучал бы так - а существует ли бесконечный, замкнутый на свой хвост контейнер STL? В дискуссии на stackoverflow он сформулирован как а существует ли циркулярый итератор для контейнеров STL, что, конечно, выглядит более элегантно и просто.
stackoverflow.com/questions/2616643/is-there-a-sta...
И даже незатейливая реализация предложена:
Iterator cursor;
Iterator begin;
Iterator end;
RingIterator (Container& v) : data(v), cursor(v.begin()), begin(v.begin()), end(v.end()) {}
RingIterator& operator++()
{
++cursor;
if (cursor == end)
cursor = begin;
return *this;
}
Ну, то что забавно, что итератор в курсе где он вообще гуляет и еще каждый раз задается вопросом "иде я?", это ладно, хотя тревожный признак - вроде как это не должно волновать ни его, ни алгоритмы.
Главное другое. Скажите, чем глобальная несовместимость с идеями STL? Может Вы несколько видите, тогда поделитесь, пожалуйста, интересно просветиться :)
UPD: С идеей специального контейнера для гуляния по кругу все более-менее ясно - он избыточен, так как достаточно и базовых. С идеей того, что циркулярный итератор-всезнайка это ошибка, думаю, всем ясно. А вот к алгоритму, который бы сам ходил сколько нужно по кругу внутри предоставленного ему контейнера Вы как относитесь? :)