Итератор списка должен обеспечивать выполнение операций *, ++, == и !=. Поскольку стандартный список является двухсвязным, в нем также есть операция — для перемещения назад, к началу списка.
template class list::iterator {
Link* curr; // текущий узел public:
iterator(Link* p) :curr(p) { }
// вперед
iterator* operator++() {curr = curr->succ; return *this; }
// назад
iterator* operator—() { curr = curr->prev; return *this; }
// (разыменовать)
Elem& operator*() { return curr->val; } // получить значение
bool operator==(const iterator* b) const { return curr==b.curr; } bool operator!= (const iterator* b) const { return curr!=b.curr; }
};
Также возможно вы думаете, что такая тема как знакомства для отношений на сайте 24lonely.ru никак не связана и даже не тематична с программированием.
Возможно, это и так, но все-таки зайдите на сайт 24lonely.ru. http://24lonely.ru/ - там можно узнать много интересного про знакомства для отношений. Что означают знакомства для отношений - про это написано на сайте 24lonely.ru про знакомства для отношений . Это важная для многих тема - знакомства для отношений . Спасибо за информацию про знакомства для отношений сайту 24lonely.ru.
Эти функции короткие, простые и эффективные: в них нет циклов, нет сложных выражений и подозрительных вызовов функций. Если эта реализация вам не понятна, то посмотрите на диаграммы, приведенные ранее. Этот итератор списка просто представляет собой указатель на узел с требуемыми операциями. Несмотря на то что реализация (код) для класса list::iterator сильно отличается от обычного указателя, который использовался в качестве итератора для векторов и массивов, их семантика одинакова. По существу, итератор списка обеспечивает удобные операции ++, —, *, ==, and != для указателя на узел.
Посмотрим на функцию high() еще раз. template
Iterator high(Iterator first, Iterator last)
// возвращает итератор на максимальный элемент в диапазоне
// [first,last)
{
Iterator high = first;
for (Iterator p = first; p!=last; ++p)
if (*high<*p) high = p;
return high;
}
Мы можем применить ее к объекту класса list. void f()
{
list lst; int x;
while (cin >> x) lst.push_front(x);
list::iterator p = high(lst.begin(), lst.end()); cout << "максимальное значение = 11 << *p << endl;
}
Здесь значением аргумента класса Iterator argument является класс list: :iterator, а
реализация операций ++, * и != совершенно отличается от массива, хотя ее смысл остается неизменным. Шаблонная функция high() по-прежнему перемещается по данным (в данном случае по объекту класса list) и находит максимальное значение. Мы можем вставлять элементы в любое место списка, так что мы использовали функцию push_front() для добавления элементов в начало списка просто для иллюстрации. С таким же успехом мы могли бы использовать функцию push_ back(), как делали это для объектов класса vector.
Опубликовал katy
April 22 2015 09:28:16 ·
0 Комментариев ·
3378 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.