Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Назначение и архитектура STLСодержание книги
Поиск на нашем сайте
Одна из ключевых особенностей STL заключается в том, что она ориентирована на обобщенное программирование, практически полностью состоит из шаблонов функций и классов и не использует наследование. Алгоритмы и структуры данных STL могут унифицированно использоваться как при работе со встроенными типами, так и с пользовательскими типами при условии, что пользователь четко следует правилам построения компонент библиотеки. В состав STL входят шесть видов компонент: контейнеры, алгоритмы, итераторы, функторы, адаптеры и аллокаторы. Основными из них являются первые три. Контейнеры – это обобщенные (параметризованные) структуры данных, способные хранить и управлять процессом хранения других объектов. Алгоритмы в терминологии STL – это обобщенные вычислительные процедуры, обеспечивающие обработку данных контейнеров различных видов. Итераторы представляют собой абстрактные объекты, позволяющие перемещаться между элементами контейнеров унифицированным способом. Взаимодействие контейнеров, алгоритмов и итераторов можно представлять так, как показано на рисунке 8. Рис. 8 Последовательные контейнеры Контейнеры являются ключевыми компонентами STL. Они способны хранить и управлять процессом хранения объектов произвольного типа. Выделяют две категории контейнеров: последовательные и ассоциативные контейнеры. Последовательный контейнер представляет из себя линейно упорядоченное множество однотипных объектов-элементов и обеспечивает последовательный доступ к элементам. Ассоциативный контейнер, в отличие от последовательного, позволяет организовать произвольный доступ к элементам на основе использования ключевых данных, содержащихся в элементах. Ниже рассматриваются только последовательные контейнеры; об ассоциативных контейнерах речь пойдет позднее. К числу последовательных контейнеров относятся векторы (vector), связные списки (linked list), а также двухсторонние очереди (deque – double ended queue). Вектор – это последовательность однотипных объектов произвольного типа, обладающая возможностью динамического изменения длины путем включения новых элементов в конец и поддерживающая прямой доступ к ним. Вектор определяется шаблонным классом с двумя параметрами: template <class T, template <class U> class Allocator = allocator> class vector { ... }; Первый параметр T определяет тип элементов вектора, а второй параметр Allocator инкапсулирует модель памяти программы (использование этого параметра позволяет исключить необходимость изменения реализации вектора при переходе к новой модели памяти). Чтобы создать вектор в программе, достаточно записать, например: vector<float> v; // “пустой” вектор vector<float> w(10); // вектор из 10 нулевых элементов vector<float> x(5, 3.25); // вектор вида (3.25,3.25,3.25,3.25,3.25) В результате компилятор инстанцирует класс vector<float>, а при выполнении программы происходит вызов конструктора, который формирует объекты v, w, x класса vector<float>. В дальнейшем в вектор v (или w, или x) можно будет добавить элементы типа float, удалить их, вывести содержимое вектора в поток, определить его длину и т.д. Все эти действия инкапсулированы в классе vector<float>. Например, для определения текущей длины вектора можно использовать компонентную функцию size, вставка элемента в конец вектора выполняется функцией push_back, обращение к заданному элементу осуществляется через операцию operator[], первый и последний элементы возвращаются функциями front и back соответственно, «пустота» вектора проверяется функцией empty. Названные выше и некоторые другие функции сосредоточены внутри шаблона vector (список его функций можно получить из файла vector.h, где определен этот шаблон); кроме них, вектор могут обрабатывать и глобальные функции, реализующие алгоритмы STL. Однако, для доступа к вектору они должны взаимодействовать с итераторами. Итераторы по сути обобщают понятие указателя и ассоциируются с каждым контейнером, включая и вектор. В шаблоне vector (и других шаблонах контейнеров) имеются две специальные функции, играющие особую роль для алгоритмов STL. Это функции begin и end. Обе они возвращают итераторы, при этом итератор, возвращаемый функцией begin, указывает на первый элемент вектора, а итератор, возвращаемый функцией end, ссылается за последний элемент вектора (его называют past-the-end-итератором). Вместе указанные итераторы образуют открытый справа диапазон, в котором могут работать алгоритмы. Графически это можно представить так, как показано на рисунке 9. Рис. 9 Пример vector<int> v(3); v[0] = 5; v[1] = 2; v[2] = 7; // определение итераторов vector<int>::iterator first = v.begin(); vector<int>::iterator last = v.end();
|
||||
Последнее изменение этой страницы: 2016-08-14; просмотров: 178; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.40.234 (0.007 с.) |