Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP.doc
Скачиваний:
7
Добавлен:
25.04.2019
Размер:
1.34 Mб
Скачать

Вопросы для самопроверки

  1. Каково назначение механизма подсчета ссылок?

  2. В каких из задач предыдущих разделов можно было бы применить подсчет ссылок?

  3. Опишите критерий, определяющий рациональность внедрения в класс механизма подсчета ссылок.

  4. Почему операция RefCounter::operator= содержит единственный оператор return *this; ?

  5. Можно ли было построить класс RefCounter без функции MakeUnshareable?

  6. Возможно ли внедрение подсчета ссылок в класс без использования наследования?

  7. Почему после вызова функции operator[] для неконстантного объекта с подсчетом ссылок необходима блокировка совместного использования его значения?

  8. Можно ли избежать блокировки совместного использования значения объекта, когда результат вызова операции operator[] фигурирует только как праводопустимое выражение?

  9. Почему операция operator & наиболее опасна с точки зрения механизма подсчета ссылок? Дайте обоснование и пример.

Задачи

Решите задачи 1 и 2 из главы 5, используя механизм подсчета ссылок. Покажите работу с объектами в программе.

9. Стандартная библиотека шаблонов (stl)

Стандартная библиотека шаблонов является частью стандартной библиотеки С++ и включает широкое разнообразие различных структур данных и алгоритмов их обработки.

9.1. Назначение и архитектура stl

Одна из ключевых особенностей STL заключается в том, что она ориентирована на обобщенное программирование, практически полностью состоит из шаблонов функций и классов и не использует наследование. Алгоритмы и структуры данных STL могут унифицированно использоваться как при работе со встроенными типами, так и с пользовательскими типами при условии, что пользователь четко следует правилам построения компонент библиотеки.

В состав STL входят шесть видов компонент: контейнеры, алгоритмы, итераторы, функторы, адаптеры и аллокаторы. Основными из них являются первые три. Контейнеры – это обобщенные (параметризованные) структуры данных, способные хранить и управлять процессом хранения других объектов. Алгоритмы в терминологии STL – это обобщенные вычислительные процедуры, обеспечивающие обработку данных контейнеров различных видов. Итераторы представляют собой абстрактные объекты, позволяющие перемещаться между элементами контейнеров унифицированным способом. Взаимодействие контейнеров, алгоритмов и итераторов можно представлять так, как показано на рисунке 8.

Рис. 8

9.2. Последовательные контейнеры

Контейнеры являются ключевыми компонентами STL. Они способны хранить и управлять процессом хранения объектов произвольного типа. Выделяют две категории контейнеров: последовательные и ассоциативные контейнеры. Последовательный контейнер представляет из себя линейно упорядоченное множество однотипных объектов-элементов и обеспечивает последовательный доступ к элементам. Ассоциативный контейнер, в отличие от последовательного, позволяет организовать произвольный доступ к элементам на основе использования ключевых данных, содержащихся в элементах. Ниже рассматриваются только последовательные контейнеры; об ассоциативных контейнерах речь пойдет позднее.

К числу последовательных контейнеров относятся векторы (vector), связные списки (linked list), а также двухсторонние очереди (deque – double ended queue).

Вектор – это последовательность однотипных объектов произвольного типа, обладающая возможностью динамического изменения длины путем включения новых элементов в конец и поддерживающая прямой доступ к ним. Вектор определяется шаблонным классом с двумя параметрами:

template <class T, template <class U> class Allocator = allocator>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]