@coodan

Викторина: как Вы думаете, где ошибка (STL misconception)?

На тему того, как навешивание функциональности без связи с изначальными концепциями может убить идею.

Вот занятный вопрос нашел. Он мне чисто академически интересен был. В моем наивном изложении он звучал бы так - а существует ли бесконечный, замкнутый на свой хвост контейнер 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: С идеей специального контейнера для гуляния по кругу все более-менее ясно - он избыточен, так как достаточно и базовых. С идеей того, что циркулярный итератор-всезнайка это ошибка, думаю, всем ясно. А вот к алгоритму, который бы сам ходил сколько нужно по кругу внутри предоставленного ему контейнера Вы как относитесь? :)
  • Вопрос задан
  • 246 просмотров
Решения вопроса 1
@MiiNiPaa
Если it — валидный итератор к контейнеру container, который можно разыменовать, то следущее условие должно когда-либо стать истинным ++it == container.end() и все промежуточные значения it должны быть валидными и разыменовываемыми.

Можно это обойти, если заставить RingIterator быть равным end в некоторых случаях.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы