.beginO): } int sizeO { return

Автор admin Пятница, 12 июня 2009 11:32

.beginO): } int sizeO { return Ist.sizeO: } int mainO { Ring rs: 414 Глава 7 • Обобщенные контейнеры rs.push_back(“one”): rs.push_back(“two”): rs.push_back(“three”); rs.push_back(“four”): rs.push_back(“five”): Ring::iterator it = rs.beginO: ++it: ++it: it.insertC’six”): it = rs.beginO: // Двукратный перебор элементов кольца: for (int i = 0: i < rs.sizeO * 2: i++) cout « *it++ « endl: } III:- Как видите, основной код сосредоточен в классе итератора. Итератор Ring должен уметь возвращаться к началу контейнера, поэтому в нем хранится ссылка на список своего «родительского» объекта Ring. По этой ссылке итератор узнает, добрался ли он до конца контейнера и как вернуться к началу. Интерфейс Ring весьма ограничен. В частности, в нем отсутствует функция end(), поскольку при достижении конца происходит переход к началу. А это означает, что Ring не может использоваться с многочисленными алгоритмами STL, для которых необходим конечный итератор (добавление этой возможности оказывается делом нетривиальным). А если это ограничение вас огорчает, вспомните стек, очередь и приоритетную очередь — эти кон


Комментарии закрыты.