464_____________________Часть III. Современное программирование на C++
int main() f
// Это множество будет упорядочено посредством
// идентификатора STUDENT::id.
STUDENT_SET studentSet;'
studentSet.insert(STUDENT("John Newton", 1.0));
studentSet.insert(STUDENT("Dean Brown", 3.0));
studentSet.insert(STUDENT("Carl Bishop", 2.0));
studentSet.insert(STUDENT("Gary Cook", 1.0));
STUDENT_SET2 studentSet2;
cout .« "Первое множество из " « studentSet.size() Ч>« " студентов (отсортировано по имени):" « endl;
for (STUDENT_SET::iterator i == studentSet.begin();
i != studentSet.end(); i++) ( cout « *i;
studentSet2.insert(*i); // Копируется содержимое StudentSet »
cout « " Первое множество из " « studentSet2.size О ^« " студентов (отсортировано по рейтингу):" « endl;
for (STUDENT_SET2::iterator i = studentSet2 .begin ();
i != studentSet2.end(); i++) cout « *i;
return 0;
}
Итераторы
Итераторы — это ключи, которые нужны алгоритмам для работы с контейнерами. Итераторы подобны указателям, указывающим на объекты в контейнере. Действительно, стандартные указатели C++ могут быть использованы и как итераторы. Операция * в итераторе всегда возвращает значение элемента контейнера, если только итератор указывает на допустимый элемент контейнера. Специальное значение итератора past-the-end указывает на положение за последним элементом в контейнере. В этом случае операция разыменования * в итераторе возвращает неопределенное значение и не имеет смысла. Наиболее часто используемая для всех контейнеров STL функция-член end () помогает выяснить, не достиг ли итератор значения past-the-end. Она возвращает итератор, указывающий на положение за последним элементом в контейнере.
Существуют пять типов итераторов:
• Ввода (input)
• Вывода (output)
• Прямой (forward)
• Двунаправленный (bidiretional)
• Произвольного доступа (random access)