Итераторы — это клей, скрепляющий алгоритмы стандартной библиотеки с их данными. Итераторы можно также назвать механизмом, минимизирующим зависимость алгоритмов от структуры данных, которыми они оперируют.
sort, find, search, сору my_very_own_algorithm, your_code,...
Также на сайте aromacoffee.ru можно узнать много интересного на тему http://aromacoffee.ru/category/87/kofemashina-dlya-doma.html
Что означает вообще тема кофемашина для дома про это написано на сайте aromacoffee.ru Спасибо сайту за информацию
Модель итераторов
Итератор — это аналог указателя, в котором реализованы операции косвенного доступа (например, оператор * для разыменования) и перехода к новому элементу (например, оператор ++ для перехода к следующему элементу). Последовательность элементов определяется парой итераторов, задающих полуоткрытый диапазон [begin:end).
Иначе говоря, итератор begin указывает на первый элемент последовательности, а итератор end — на элемент, следующий за последним элементом последовательности. Никогда не считывайте и не записывайте значение *end. Для пустой последовательности всегда выполняется условие begin==end. Другими словами, для любого итератора p последовательность [p:p) является пустой.
Для того чтобы считать последовательность, алгоритм обычно получает пару итераторов (b,e) и перемещается по элементам с помощью оператора ++, пока не достигнет конца.
while (b!=e) { // используйте !=, а не <
// какие-то операции
++b; // переходим к последнему элементу
}
Алгоритмы, выполняющие поиск элемента в последовательности, в случае неудачи обычно возвращают итератор, установленный на конец последовательности. Рассмотрим пример.
p = find(v.begin(),v.end(),x); // ищем x в последовательности v if (p!=v.end()) {
// x найден в ячейке p
}
else {
// x не найден в диапазоне [v.begin():v.end())
}
Алгоритмы, записывающие элементы последовательности, часто получают только итератор, установленный на ее первый элемент. В данном случае программист должен сам предотвратить выход за пределы этой последовательности. Рассмотрим пример.
template void f(Iter p, int n)
{
while (n>0) *p++ = —n;
}
1144
ОБЗОР СТАНДАРТНОЙ БИБЛИОТЕКИ
vector v(10); f(v.begin(),v.size()); // OK f(v.begin(),1000); // большая проблема
Некоторые реализации стандартной библиотеки проверяют выход за пределы допустимого диапазона, т.е. генерируют исключение, при последнем вызове функции f(), но этот код нельзя считать переносимым; многие реализации эту проверку не проводят.
Опубликовал katy
May 08 2015 09:52:36 ·
0 Комментариев ·
3352 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.