Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции программирование / polevoy_cpp_2012_spring_lecture_10

.pdf
Скачиваний:
31
Добавлен:
20.04.2015
Размер:
143.2 Кб
Скачать

Массив, как диапазон

• [beg, beg + SIZE)

• число элементов SIZE = last – first

• last, как признак конца обработки

пример:

for (p = first; p != last; ++p)

{

if (value != *p)

...

}

14.04.2012

cppNewb.ru

11

Контейнер

является регулярным типом

содержит свои элементы

предоставляет доступ к элементам

14.04.2012

cppNewb.ru

12

Свойства элемента контейнера

элемент может принадлежать не более, чем одному контейнеру (семантика значений)

контейнеры не пересекаются

ограничение на объекты, а не на значения

время жизни элемента не превышает время жизни контейнера

создается не раньше

уничтожается не позже

14.04.2012

cppNewb.ru

13

Иерархия концепций контейнеров

Контейнер Произвольного Доступа

Реверсивный Контейнер

Однонаправленный Контейнер

Контейнер

итератор ввода

14.04.2012

cppNewb.ru

14

Итератор

интерфейс между алгоритмами и структурами данных

требования со стороны алгоритмов

регулярный тип

operator=(), operator==()

• доступ к элементу контейнера

operator*(), operator->()

• навигация по контейнеру

14.04.2012

cppNewb.ru

15

Итератор (пример алгоритма)

template<class I, class T>

I find(I fst, I lst, const T& val)

{

while (fst != lst && *fst != val)

++first; return first;

}

iV = find(b, e, v); if (iV != e)

...

14.04.2012

cppNewb.ru

16

Принцип идентичности

соотношения равенства итераторов и равенства объектов

i1

==

i2

&*i1 == &*i2

i1

==

i2

*i1 == *i2

14.04.2012

cppNewb.ru

17

Константные и изменяемые итераторы

константный итератор

доступ к константному объекту

константный объект (значительно реже)

пример:

const int* pData(0);

// !не константный итератор int* const pVariant(&pA);

14.04.2012

cppNewb.ru

18

Итератор Произвольного Доступа

допускает написание алгоритма с произвольным доступом к контейнеру

все манипуляции за амортизированное

константное время

operator++(), operator--() operator+=(int) operator-()

operator<()

operator[](int)

14.04.2012

cppNewb.ru

19

Двунаправленный Итератор

допускает написание многопроходного алгоритма

operator++(), operator--()

14.04.2012

cppNewb.ru

20