Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы
Скачать 1.76 Mb.
|
Контейнерные классыИтераторы В STL существуют следующие типы итераторов:
Выходные итераторы (OutputIterator) используются алгоритмами для записи значений в контейнер, аналогично тому, как программа может выводить данные в поток cout. Прямые итераторы (ForwardIterator) используются алгоритмами для навигации по контейнеру только в прямом направлении, причем, они позволяют и читать, и изменять данные в контейнере. Двунаправленные итераторы (BidirectionalIterator) имеют все свойства прямых итераторов, но позволяют осуществлять навигацию по контейнеру и в прямом, и в обратном направлениях (для них дополнительно реализованы операции префиксного и постфиксного декремента). Итераторы произвольного доступа (RandomAccessIterator) имеют все свойства двунаправленных итераторов плюс операции (наподобие сложения указателей) для доступа к произвольному элементу контейнера. Контейнерные классыДля двунаправленных итераторов и итераторов произвольного доступа определены разновидности, называемые адаптерами итераторов. Обратный итератор (reverse_iterator) – это адаптер, просматривающий последовательность в обратном направлении. Итераторы вставки предназначены для добавления элементов в
конец (back_iterator) ; произвольное место (insert_iterator) контейнера. Контейнерные классыОбщие свойства контейнеров Для удобства использования в большинстве контейнерных классов с помощью typedef определены синонимы типов, которые можно использовать при написании шаблонов функций, ничего не зная о настоящих типах контейнера: Унифицированные типы, определенные в STL
Контейнерные классыВозьмем для примера функцию вычисления суммы всех элементов контейнера: template { typename C::value_type s = 0; typename C::const_iterator p = c.begin(); while (p!=c.end()) { s+=*p; ++p; } return s; } Теперь её можно использовать для работы с любым контейнером: vector int m[5]={1,2,3,4,5}; v1.insert(v1.begin(), m, m+5); cout << sum(v1) << endl; Контейнерные классы
|