438 ____Часть III. Современное программирование на C++

Для некоторых контейнеров также определена и версия со счетчиком. Эти контейнеры отслеживают число элементов в контейнере. Такие контейнеры содержат букву с в имени и поддерживаются только для векторов.

Соглашения для имен контейнеров

Большое число классов и их длинные названия могут на первый взгляд показаться сложными и громоздкими. Раздел BIDS Справочника по библиотекам Borland (Borland Library Reference) предоставляет хороший список доступных классов. Из списка легко понять, что существуют определенные образцы именования классов. Имена классов BIDS подчиняются строгим правилам, которые направлены на то, чтобы нужный класс легко можно было найти или определить его характеристики. В целом формат имен контейнеров ADT имеет вид:

T[M] [I] [S] [ADT]As[FDS]

Имена всех классов начинаются с буквы т, за которой следуют'модификато-ры. Каждый из модификаторов уже обсуждался в данной главе. Модификатор м указывает, что должен поддерживаться определяемый пользователем менеджер памяти, i означает, что контейнер хранит указатели на объекты, а не сами объекты, s указывает на сортируемый контейнер. Например, в состав имени TMiSArrayAs Vector входят все модификаторы.

Имена классов-контейнеров FDS имеют несколько иной формат:

Т[М] [I] [S] [С] [FDS] Imp

Модификатор с указывает на контейнер со счетчиком, а суффикс imp указывает на реализацию (Implementation). В качестве примеров названий классов, иллюстрирующих эти соглашения, можно привести TMicvectorimp и

TMISVectorImp.

Не все названия классов следуют этим соглашениям. Так, например, имена классов ТАггау и TSArray также допустимы и в действительности являются

НИЧеМ ИНЫМ, как ПрОСТО СИНОНИМаМИ TArrayAsVector И TSArrayAsVector.

Итераторы контейнеров

Все контейнеры имеют функции-члены доступа (access functions), которые обеспечивают доступ к объектам контейнера и согласуются с ним по типу. Доступ к элементам массива обеспечивает операция []. Стек имеет функции-члены pop и push. Иногда желательно иметь возможность "пробежать" по всем элементам контейнера. Базовая реализация таких контейнеров, как стек, не позволяет обеспечивать доступ этого рода. Контейнеры BIDS обеспечивают два варианта решения задачи — функцию-член ForEach и класс-итератор или просто итератор.