Доступ к книге ни в коем случае не нужен.
Проблемы, с которыми мы здесь имеем дело, Зависимость и Повторное использование .
Вправильно разработанное программное обеспечение, вы пытаетесь изолировать элементы друг от друга, чтобы уменьшить зависимости, потому что зависимости необходимо преодолеть, когда необходимо внести изменения.
В правильно разработанном программном обеспечении вы применяете Принцип СУХОЙ (не повторяйте себя), потому что, когда изменение необходимо, больно и подвержено ошибкам повторять его в дюжине разных мест.
«Классическое» ОО-мышление становится все более и болееплохо справляется с зависимостями.Имея множество методов, напрямую зависящих от внутренних элементов класса, малейшее изменение подразумевает полное переписывание.Так не должно быть.
В C ++ STL (не вся стандартная библиотека) была разработана с явными целями:
- вырезание зависимостей
- разрешить повторное использование
Таким образом, контейнеры предоставляют четко определенные интерфейсы, которые скрывают свои внутренние представления, но при этом обеспечивают достаточный доступ к информации, которую они инкапсулируют, чтобы на них могли выполняться алгоритмы.Все изменения производятся через интерфейс контейнера, так что гарантируются инварианты.
Например, если вы думаете о требованиях алгоритма sort
.Для реализации, используемой (в общем) STL, требуется (из контейнера):
- эффективный доступ к элементу по заданному индексу: Произвольный доступ
- возможностьпоменяйте местами два элемента: не ассоциативный
Таким образом, любой контейнер, который обеспечивает произвольный доступ и не является ассоциативным, (в теории) подходит для эффективной сортировки, скажем, алгоритмом быстрой сортировки.
Какие контейнеры в C ++ удовлетворяют этому?
- базовый массив C
deque
vector
И любой контейнер, который вы можете написать, если вы обратите внимание на эти детали.
Было бы расточительно, не так ли, переписать (копировать / вставить / настроить) sort
для каждого из них?
Обратите внимание, например, что есть метод std::list::sort
.Зачем ?Поскольку std::list
не предлагает произвольный доступ (неофициально myList[4]
не работает), поэтому алгоритм sort
from не подходит.