Шаг 1.
Библиотека STL.
Обзор STL

    На этом шаге мы дадим краткий обзор библиотеки STL.

    Когда несколько лет назад в языке C++ появились шаблоны, лишь немногие из программистов на C++ могли предположить, какое влияние это окажет на стандарт библиотеки языка. Стандартная библиотека шаблонов (Standard Template Library) была первоначально разработана сотрудниками Hewlett-Packard А.А.Степановым и М.Ли совместно с Д.Р.Муссером из Ренсселэровского политехнического института. После внесения незначительных поправок Комитет по стандартизации языка С++ принял STL, сделав ее существенной составной частью стандартной библиотеки. Использование STL дает возможность создавать более надежные, более переносимые и более универсальные программы, а также сократить расходы на разработку. Это значит, что ни один профессиональный программист не может себе позволить пройти мимо этой библиотеки.

    Ядро стандартной библиотеки шаблонов включает три основных элемента:

    Они работают совместно один с другим, предоставляя тем самым готовые решения различных задач программирования.

    Контейнеры - это объекты, содержащие другие объекты. Существует несколько различных типов контейнеров. Например, класс vector определяет динамический массив, класс queue создает двустороннюю очередь, а класс list обеспечивает работу с линейным списком. Эти контейнеры называются последовательными контейнерами и являются базовыми в STL. Помимо базовых, библиотека STL определяет ассоциативные контейнеры, которые позволяют эффективно находить нужные значения на основе заданных ключевых значений (ключей). Например, класс map обеспечивает хранение пар "ключ-значение" и предоставляет возможность находить значение по заданному уникальному ключу.

    Алгоритмы обрабатывают содержимое контейнеров. Их возможности включают средства инициализации, сортировки, поиска и преобразования содержимого контейнеров. Многие алгоритмы работают с заданным диапазоном контейнера.

    Итераторы - это объекты, которые в той или иной степени действуют подобно указателям. Они позволяют циклически опрашивать содержимое контейнера практически так же, как это делается с помощью указателя при циклическом опросе элементов массива. Существуют пять типов итераторов, которые представлена в таблице 1.

Таблица 1. Типы итераторов
Итераторы Описание
Произвольного доступа (random access) Сохраняют и считывают значения; позволяют организовать произвольный доступ к элементам контейнера
Двунаправленные (bidirectional) Сохраняют и считывают значения; обеспечивают инкрементно-декрементное перемещение
Однонаправленные (forward) Сохраняют и считывают значения; обеспечивают только инкрементное перемещение
Входные (input) Считывают, но не записывают значения; обеспечивают только инкрементное перемещение
Выходные (output) Записывают, но не считывают значения; обеспечивают только инкрементное перемещение

    Итераторы обрабатываются аналогично указателям. Их можно инкрементировать и декрементировать. К ним можно применять оператор разыменования адреса *. Итераторы объявляются с помощью типа iterator, определяемого различными контейнерами.

    STL опирается не только на контейнеры, алгоритмы и итераторы, но и на другие стандартные компоненты. Основными из них являются распределители памяти, предикаты и функции сравнения.

    Каждый контейнер имеет свой распределитель памяти (allocator). Распределители управляют выделением памяти для контейнера. Стандартный распределитель - это объект класса allocator, но при необходимости можно определять собственные распределители.

    Некоторые алгоритмы и контейнеры используют специальный тип функции, называемый предикатом (predicate). Существует два варианта предикатов: унарный и . Унарный предикат предикат принимает один аргумент, а бинарный - два. Эти функции возвращают значения ИСТИНА/ЛОЖЬ, но точные условия определяются программистом.

    Некоторые алгоритмы и классы используют специальный тип бинарного предиката, который сравнивает два элемента. Функции сравнения возвращают значение true, если их первый аргумент меньше второго. Функции сравнения идентифицируются с помощью типа Comp.

    На следующем шаге мы рассмотрим контейнерные классы.




Содержание Следующий шаг