Создание игр » Featured, STL » STL: Standard Template Library
STL: Standard Template Library
Сегодня я хочу рассказать вам о STL (Standard Template Library) – стандартной библиотеке шаблонов языка C++. Изначально STL была сторонней разработкой, которая разрабатывалась сначала HP, а потом SGI. Позже STL стала неотъемлемой частью языка, каковой и является до сих пор, постоянно развиваясь и расширяясь. STL представляет из себя набор обобщённых шаблонов С++, включающий в себя контейнеры, алгоритмы и итераторы. Кроме того, STL содержит в себе наиболее часто используемые алгоритмы и структуры данных, что облегает программирование с её использованием. Иными словами STL (Standard Template Library) это набор шаблонов, который существенно облегчает, упрощает и ускоряет программирование повседневных задач.
Зачем STL
Зачем же использовать STL при создании игр? Ответ содержится в последнем предложении предыдущего абзаца: STL существенно облегчает, упрощает и ускоряет программирование, в том числе и игр. Я немного позже покажу, как именно STL ускоряет процесс создания и отладки программы. Пока же поговорим о том, из чего конкретно состоит эта стандартная библиотека шаблонов.
Компоненты STL
Обычно в Standard Template Library выделяют 5 основных компонентов:
- Контейнер (container) – “массив”, обеспечивающий хранение (набора) объектов в памяти.
- Итератор (iterator) – это средство доступа к содержимому контейнера. (см. Урок STL: итераторы)
- Алгоритм (algorithm) – процедура, выполняющая какие-то действия над элементами контейнера.(см. Урок о алгоритмах STL)
- Адаптер (adaptor) – набор шаблонов для обеспечения различного интерфейса (например, интерфейс ввода/вывода)
- Функциональный объект (functor) — объект, скрывающий в себе функцию, для того, что бы её могли использовать другие компоненты STL.
Все шаблоны STL находятся в нэймспейсе std:: (от STandarD), потому для их использования либо надо использовать их как std::имя_шаблона (например std::string) или в начале программы написать using namespace std.
Наиболее часто используются следующие шаблоны-контейнеры STL:
- std::vector – динамический массив с произвольным (т.е. не обязательно по порядку) доступом к элементам и с автоматическим изменением размера массива при добавлении/удалении элементов. (см. Урок про std::vector)
- std::map – упорядоченный ассоциативный массив (пар) элементов. Каждая пара состоит из ключа и значения (например, ID игрового перса + сам объект перса). Ключи обязательно должны быть уникальны – за этим следит сам std::map. Порядок следования элементов (при их последовательном переборе) определяется ключами, т.к. массив хранится отсортированным по ключам.
- std::queue – массив-очередь. Это контейнер, в который элементы добавляются с одной стороны(с конца), а извлекаются с другой стороны (с начала).
- std::priority_queue – тоже массив-очередь. Но, в отличие от обычной очереди, каждому элементу массива задаётся “приоритет” и извлекать из массива всегда можно только самый “приоритетный” элемент.
- std::stack – классический стэк из элементов. Добавление и извлечение элементов происходит с одного конца (последний добавленный элемент будет извлекаться первым).
Использование STL
Использовать шаблоны STL очень просто, например:
using namespace std; void main(void) { std::vector<int> massiv; // массив целых чисел massiv.push_back(10); // добавить в массив число 10 massiv.push_back(1); // добавить в массив число 1 massiv.push_back(99); // добавить в массив число 99 // извлекаем из массива последний элемент int iLastNumber = massiv.pop_back(); // при этом он удалится из массива size_t iMassivSize = massiv.size(); // получаем текущий размер массива massiv.clear(); // очистить массив (удалить все элементы) } // тут массив сам удалится и больше не будет использовать память |
Попробуйте сделать то же самое без STL )))
Узнать об STL
Узнать больше об STL вы можете в
В следующих уроках по STL я расскажу про STL и её использование более подробно. А этот урок подошёл к концу, спасибо за внимание.