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

polevoy_cpp_2012_spring_lecture_12

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

Адаптирующие итераторы

•insert_iterator

•back_insert_iterator

•front_insert_itarator

28.04.2012

cppNewb.ru

71

std::back_insert (адаптирующий итератора)

•вставка элементов в конец контейнера для алгоритмов переписывающих значения (например, copy)

•контейнер должен обеспечивать push_back

•вызов operator= приводит к вставке, остальные операции ничего не меняют

28.04.2012

cppNewb.ru

72

std::back_inserter (производящая функция)

template <class Cont>

back_insert_iterator<Cont>

back_inserter(Cont& x)

28.04.2012

cppNewb.ru

73

Конструирование алгоритмов

•как « склеить» две последовательности?

–скопировать одну в конец второй

пример:

list<int>::iterator it(firList.begin());

advance (it, 3);

insert_iterator<list<int> >

insertIt(firList, it);

copy(secList.begin(),secList.end(),

insertIt);

28.04.2012

cppNewb.ru

74

Операции над итераторами

•advance

–смещение итератора

•difference

–расстояние между итераторами

28.04.2012

cppNewb.ru

75

Рекомендации

•избегайте повторного написания алгоритмов

•конструируйте алгоритмы

•помните о копировании объектов

•читайте книги и практикуйте 8)

28.04.2012

cppNewb.ru

76

Агде в stl стек или очередь?

•адаптер

–класс преобразующий интерфейс объекта к нужному интерфейсу

–в stl – шаблонный класс

•адаптеры контейнеров

std::stack

std::queue

std::prioriy_queue

28.04.2012

cppNewb.ru

77

std::stack (адаптер)

template<class T,

class Cont = deque<T> >

class stack;

bool empty() const size_t size() const

value_type& top() // const

void push(const T&) void pop()

28.04.2012

cppNewb.ru

78

std::queue (адаптер)

template<class T,

class Cont = deque<T> >

class queue;

bool empty() const size_t size() const

value_type& front() value_type& back() const

void push(const T&) void pop()

28.04.2012

cppNewb.ru

79

std::priority_queue (адаптер)

template<class T,

class Cont = vector<T>,

class Cmp = less<typename Cont::value_type>

>

class priority_queue;

bool empty() const size_t size() const

value_type& top() // const

void push(const T&) void pop()

28.04.2012

cppNewb.ru

80