Шрифт:
Оглядываясь назад на методы и инструменты программирования, описанные в предыдущих главах, мы видим, что уже можем писать программы, не зависящие от типа используемых данных. Этот вывод основан на следующих фактах.
• Использование типа
• Использование типа
• Использование массива чисел типа
• Поиск значения в объекте класса
• Поиск объекта класса
• Графическое изображение экспериментальных данных с точными значениями не должно отличаться от графического изображения экспериментальных данных с округленными значениями.
• Копирование файла не должно отличаться от копирования вектора.
Учитывая сказанное, мы хотим писать код, удовлетворяющий следующим условиям:
• его легко читать;
• легко модифицировать;
• он имеет систематический характер;
• он короткий;
• быстро работает.
• Единообразный доступ к данным:
• независимость от способа хранения данных;
• независимость от типа данных.
• Доступ к данным, безопасный с точки зрения типа:
• легкое перемещение по данным;
• компактное хранение данных.
• Скорость работы:
• поиск данных;
• добавление данных;
• удаление данных.
• Стандартные версии большинства широко распространенных алгоритмов таких как
Библиотека STL обеспечивает не только эти возможности. Мы изучим эту библиотеку не только потому, что она представляет собой очень полезный набор инструментов, но и потому, что является примером максимальной гибкости и эффективности. Библиотека STL была разработана Алексом Степановым (Alex Stepanov) для того, чтобы создать базу для универсальных, правильных и эффективных алгоритмов, работающих с разнообразными структурами данных. Ее целью были простота, универсальность и элегантность математики.
Итак, рассмотрев мотивы и цели, перейдем к описанию основных определений из библиотеки STL, а затем изучим примеры их применения для более простого создания более совершенного кода для обработки данных.
20.3. Последовательности и итераторы
Основным понятием в библиотеке STL является последовательность. С точки зрения авторов этой библиотеки, любая коллекция данных представляет собой последовательность. Последовательность имеет начало и конец. Мы можем перемещаться по последовательности от начала к концу, при необходимости считывая или записывая значение элементов. Начало и конец последовательности идентифицируются парой итераторов. Итератор (iterator) — это объект, идентифицирующий элемент последовательности.
Последовательность можно представить следующим образом:
Здесь