Использование библиотеки STL
Первые шаги
Для того, чтобы в программе можно было пользоваться функциональностью STL, следует подключить соответствующие заголовочные файлы. Большинство контейнеров описываются в заголовочном файле, имя которого совпадает с типом контейнера. Расширения у заголовочных файлов при этом отсутствует. Например, если вы планируете использовать в своей программе стандартный контейнер stack, то в программу следует добавить следующую директиву:
#include <stack>Типы контейнеров, а также алгоритмы, функторы, да и вообще вся библиотека STL определены не в глобальном пространстве имён. Ввиду большого количества зарезервированных слов в STL, все они вынесены в отдельное пространство имён, получившее название std.
Существует несколько способов пользоваться ключевыми словами из пространства имён std. Универсального, стопроцентно пригодного на все случаи жизни решения искать не следует, у каждого метода есть свои преимущества и недостатки. Перечислим их.
- Добавить строку
using namespace std;
непосредственно после всех подключаемых (#include) файлов.Это решение плохо тем, что в STL есть ряд достаточно простых зарезервированных слов (например, swap, set, find, count), и подобное подключение пространства имён std потребует от программиста аккуратности в выборе названий для своих классов и функций. Тем не менее, если вы поставили себе целью овладеть STL в совершенстве, автор рекомендует использовать подключение пространства имён std именно в таком формате.
- Подключить желаемые модули STL отдельными директивами using:
using std::stack; using std::find;
- Использовать директиву typedef для каждого используемого типа:
typedef std::vector<int> VI;
- Писать префикс std:: перед каждым STL типом данных либо алгоритмом.
// Нехорошо: две закрывающих угловых скобки подряд vector<vector<int>> WrongDefinition; // ОК vector< vector<int> > RightDefinition;Забегая вперёд, следует заметить, что один из наиболее удачных способов борьбы с подобными ошибками -- использование typedef. Повторяя предыдущий пример:
typedef vector<int> vi; typedef vector<vi> vvi;