Основные требования управления контейнером |
8 контейнере распределение памяти предпочтительней выполнять с помощью распределителя памяти, а не операциями new и delete. Следовательно, контейнер должен использовать функции-члены распределителя памяти для выделения и очистки памяти. Распределитель задается как параметр при создании контейнера. В языке С++ есть класс-распределитель, заданный по умолчанию и названный allocator, и соответствующий параметр контейнера может указывать на объект этого типа, что и делают все стандартные контейнеры. Все распределители памяти должны предоставлять те же функции-члены, что и тип allocator (но, конечно, их реализация может быть разной). Таким образом, контейнер может использовать любой распределитель памяти, описанный программистом. Функции распределителя памяти, используемые контейнером, разрабатываемым в данной главе, приведены в табл. 8.1 Каждый контейнер должен поддерживать следующие типы: О iterator О const_iterator О reference ? const_reference ? value_type ? size_type ? difference_type Реверсивный контейнер (поддерживающий двунаправленные итераторы) должен также предоставлять следующие типы: ? reverse_iterator ? cons t_reverse_.it era tor Все контейнеры должны содержать заданный по умолчанию конструктор, создающий пустой контейнер, и копирующий конструктор. Необходимы также разные параметризованные конструкторы, точная форма которых различна у последовательных и ассоциативных контейнеров. Кроме того, требуется деструктор. Должны поддерживаться следующие функции-члены: begin О clear () empty О end() erase () insert () max_size() rbeginO rend() sized swap() Функции rbeginO и rendo нужны только в реверсивных контейнерах. Некоторые функции имеют перегруженные представления (overloaded forms).
|