лекции программирование / polevoy_cpp_2012_spring_lecture_10
.pdf
Вставка и удаление интервала
• из конца
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 |
