Главная arrow С++ (часть 2) arrow Разработка пользовательского контейнера STL

Разработка пользовательского контейнера STL

Главная тема книги — богатые возможности, предоставляемые программисту, пишущему на С++. Может быть, лучше всего их проиллюстрирует стандартная библиотека шаблонов (STL), позволяющая изменить способ написания программ. Библиотека STL представляет собой тщательно разработанный набор шаблонов классов и функций, которые реализуют многие популярные и часто используемые структуры данных и алгоритмы. Поскольку библиотека предлагает готовые решения для множества задач программирования, включающих хранение и извлечение данных, код с применением STL встречается очень часто. Например, подсистема сбора мусора из главы 2 и панель управления из главы 3 используют эту библиотеку, существенно упрощающую их код. В прошлом необходимую структуру, такую как список, стек или очередь, приходилось программировать вручную. Сегодня Программист может просто использовать одну из структур библиотеки STL.
Ядром стандартной библиотеки шаблонов служит контейнер, представляющий собой объект, содержащий другие объекты. Библиотека STL предлагает несколько встроенных контейнеров, которые поддерживают такие структуры данных, как стеки, очереди, списки и векторы. Поскольку контейнеры в библиотеке описаны как шаблоны (templates), они могут содержать объекты любых типов, включая объекты созданных вами классов.
Несмотря на то, что встроенные контейнеры очень полезны, ваши возможности не ограничиваются ими. Одно из впечатляющих достоинств библиотеки STL состоит в том, что она позволяет создавать собственные контейнеры. Таким образом, стандартную библиотеку шаблонов можно расширять. Как только вы описали контейнер, он автоматически становится совместимым с остальным содержимым STL.
В этой главе вы узнаете, как можно создать свой собственный контейнер STL. Несмотря на то, что создать пользовательский контейнер нетрудно, многих Программистов пугает подобная затея. Причиной тому — непреодолимый на первый взгляд синтаксис библиотеки STL, базирующийся на шаблонах. На самом деле стандартная библиотека шаблонов — концептуально строгая и понятная подсистема. Если вы будете следовать нескольким правилам, то легко избежите ошибок, создавая собственный контейнер.
Предлагаемый в этой главе пользовательский контейнер реализует динамический массив с настраиваемым диапазоном индексов (range-selectable dynamic array), называемый RangeArray. При использовании такого массива можно задавать начальное и конечное значения индекса. Например, тип RangeArray позволяет создать массив, номера элементов которого меняются в диапазоне от -10 до 10.