polevoy_cpp_2012_spring_lecture_10
.pdfОднонаправленный Итератор
•допускает написание однопроходного алгоритма
operator++()
•возможно существование более одного итератора для интервала
14.04.2012 |
cppNewb.ru |
21 |
Итератор Вывода
•однопроходное чтение (извлечение) элементов
–не изменяет элементы
–единственный итератор для диапазона
–по диапазону нельзя пройти более одного раза
operator++()
14.04.2012 |
cppNewb.ru |
22 |
Итератор Ввода
•однопроходная запись элементов
–единственный итератор для диапазона
–по диапазону нельзя пройти более одного
раза
–не сравниваются (конец задан неявно)
operator++()
пример:
*iV = x;
14.04.2012 |
cppNewb.ru |
23 |
Пример алгоритма (copy)
template<class InpI, class OutI>
OI copy(InpI first, InpI last, OutI res)
{
for (; first != last; ++res, ++first)
{
*res = *first;
}
return res;
}
14.04.2012 |
cppNewb.ru |
24 |
Классы итераторов в STL
•iterator и const_iterator
•являются вложенными классами для классов контейнеров
пример:
list<int>::iterator
list<int>::const_iterator
14.04.2012 |
cppNewb.ru |
25 |
Интервал элементов контейнера
•begin()
–первый элемент (начало)
•end()
–элемент, следующий за последним (конец)
пример:
vector<int> ms;
vector<int>::iterator i(ms.begin());
14.04.2012 |
cppNewb.ru |
26 |
Пример поиска
// C data;
C::iterator it(dt.end());
it = find(dt.begin(), dt.end(), k); if (dt.end() != it)
// найден элемент со значением k
{
...
}
14.04.2012 |
cppNewb.ru |
27 |
Контейнеры переменного размера
•Последовательность (Sequence)
•Ассоциативный Контейнер
(Associative Container)
14.04.2012 |
cppNewb.ru |
28 |
Вставка элемента
•в конец
–push_back
•в начало
–push_front
•в произвольной позиции
–insert
14.04.2012 |
cppNewb.ru |
29 |
Удаление элемента
• из конца
pop_back()
• из начала
pop_front()
• из произвольной позиции
remove()
14.04.2012 |
cppNewb.ru |
30 |