polevoy_cpp_2012_spring_lecture_12
.pdfАдаптирующие итераторы
•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 |