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

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

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

Вставка и удаление интервала

• из конца

pop_back()

• из начала

pop_front()

• из произвольной позиции

remove()

14.04.2012

cppNewb.ru

31

Последовательности в STL

vector // массив

произвольный

list // список

последовательный двунаправленный

deque // дэк

произвольный

14.04.2012

cppNewb.ru

32

Ассоциативные контейнеры в STL

set // множество

multiset // мультимножество

map // ассоциативный контейнер

multimap

// множетсвенный ассоциативный контейнер

14.04.2012

cppNewb.ru

33

typename (ключевое слово)

явное указание, что идентификатор является именем типа (в шаблонном коде)

может использоваться вместо class в описании параметров шаблона

14.04.2012

cppNewb.ru

34

Свойства (traits)

свойства (ассоциированные типы) – часть концепции

пример:

template<class T> T

min(const T& lhs, const T& rhs)

{

return (lhs < rhs) ? lhs : rhs;

}

14.04.2012

cppNewb.ru

35

iterator_traits (для классов)

template<class I> struct iterator_traits

{

typedef typename I::value_type value_type;

};

14.04.2012

cppNewb.ru

36

iterator_traits (для указателей)

template<typename I>

struct iterator_traits<typename I*>

{

typedef I value_type;

};

template<typename I>

struct iterator_traits<typename const I*>

{

typedef I value_type;

};

14.04.2012

cppNewb.ru

37

Пример использования свойств

// сумма в непустом диапазоне template<class I>

typename iterator_traits<I>::value_type sum(I first, I last)

{

typename iterator_traits<I>::value_type res(*first++);

for (; first != last; ++first) res += *first;

return res;

}

14.04.2012

cppNewb.ru

38

Операции над контейнерами и валидность итераторов

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

(в зависимости от реализации итераторов и контейнеров)

всегда следите за валидностью итераторов

избегайте хранения итераторов

14.04.2012

cppNewb.ru

39

Реверсивные итераторы для контейнеров

значения интервала в обратном порядке

специальные свойства и методы

reverse_iterator

rbegin()

rend()

• отличаются от обычных итераторов

14.04.2012

cppNewb.ru

40