2010-04-23 8 views
7

Я изучаю STL и шаблоны проектирования. я хотел бы знать, есть ли документ или ссылка, которая объясняет, как шаблоны проектирования реализуются в STL я сделал Google, но не в состоянии получить много данныхшаблоны проектирования, используемые в STL (стандартная библиотека шаблонов)

+3

STL - это универсальное программирование, не ориентированное на объект. Вам нужно переустановить. – KitsuneYMG

+1

@ kts: шаблоны проектирования не являются эксклюзивными для объектно-ориентированного дизайна. –

+0

Вы смотрите на некоторую реализацию STL. Исходный код может ответить вам на множество вопросов. – Ross

ответ

12

Надеюсь, вы имеете в виду, «какие шаблоны дизайна можно идентифицировать в STL».

Стек STL - это контейнерный адаптер. Адаптер представляет собой шаблон проектирования. Итератор также является шаблоном проектирования. Объекты функции STL связаны с шаблоном команды.

Шаблоны:

  1. адаптер (контейнерные адаптеры)
    • стек
    • очереди
    • очередей приоритетов
  2. итератора
  3. команда + адаптер (функциональные адаптеры)
  4. итератора + адаптер (итератора адаптеры)
    • обратные итераторы
    • вставки итераторы
    • поток итераторы
  5. Шаблон Метод (алгоритмы STL с использованием определенных пользователем функций)
  6. Какой порождающие шаблоны проектирования ? (Распределители)

Способ реализации этих шаблонов сильно отличается от способа реализации в объектно-ориентированном дизайне. Josuttis писал: «Концепция STL противоречит первоначальной идее объектно-ориентированного программирования». Это то, что вызывает путаницу вокруг вашего вопроса.

+0

Есть ли у вас пример адаптера итератора в STL? – Frank

+0

@dehmann: Я добавил их. Не стесняйтесь редактировать мой ответ. –

+1

5. Метод шаблона (алгоритмы STL с использованием пользовательских функций) –

1

Я думаю, что ваша проблема заключается в том, что дизайн модель не реализованы в STL. Они могут быть реализованы на C++ и использовать контейнеры и алгоритмы из STL, но STL и Design Patterns не связаны каким-либо другим способом.

Моим советом было бы узнать о STL, прочитав что-то вроде Nicolai Josuttis' excellent book The C++ Standard Library: A Tutorial and Reference или STL Tutorial and Reference Guide. Это поможет узнать, что STL может сделать для вас. Затем вы можете внедрить шаблоны проектирования на C++, используя свои знания о STL.

+1

STL и Design Patterns определенно связаны между собой. Они оба касаются абстракций. –

+0

Итераторы - это шаблон дизайна. Определенно реализовано в STL. –

+0

@MartinYork - Несмотря на название, я не согласен с тем, что реализация итераторов в STL представляет собой реализацию шаблона проектирования Iterator больше, чем указатели. Шаблон канонического итератора включает в себя метод определения того, будет ли траверс больше не давать элементы без запроса базовой коллекции. –

1

STL широко использует шаблоны. GoF вызовите эти параметризованные типы. Шаблоны полезны для настройки решения шаблона дизайна или придумывания нового, интуитивного решения. (Подробнее см. Раздел «Наследование по сравнению с параметризованными типами» в «Design Patterns: Elements of Reusable Object-Oriented Software»). Преимущество знакомства с STL (и boost) заключается в том, что они являются хорошим источником, чтобы узнать о шаблонах (и мета-программировании) на C++, которые, в свою очередь, могут быть использованы при разработке лучших проектов.

Смежные вопросы