Форум программистов, компьютерный форум, киберфорум
Наши страницы

Итератор ? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В идентификаторе минимальной длины определить количество букв http://www.cyberforum.ru/cpp-beginners/thread342496.html
Вообщем это пример который дали в методичке по с++ но он нифига не работает, сам я фигово пока понимаю в С++ только начинаю его изучать я заочник, люди можите исправить его чтоб работал этот пример,...
C++ fstream с++ Помогите пожалуйста... Как при считывании из файла считать переменные если они в файле находяться на разных строчках например надо считать a,b а они в файле записаны так: 1 2 переделайте... http://www.cyberforum.ru/cpp-beginners/thread342494.html
Алгоритм Дейкстры C++
Всем доброго времени суток! Решал я задачу на ацмп про алгоритм Дейкстры. http://********/?main=task&id_task=132 Но зараза заваливается на 8 тесте. Не могли бы вы сказать в чем дело? #include...
VS 6.0 C++
Подскажите пожалуйста, как добавлять dll-ки и папки с хидерами (.h) в Visual Studio 6.0? :-[
C++ Выравнивание текста http://www.cyberforum.ru/cpp-beginners/thread342466.html
Как мне выравнить текст в этом коде, как показано на рисунке ? cout<<"Едем ................................................"<<endl<<endl; cout<<"Лифт №1"; if(lif==chen) cout<<"(Вы)"; cout<<"...
C++ Юникод в Си++ Здравствуйте. int main(int argc, char *argv) { wstring s1 = L"abracadabra"; cout << s1.size() << endl; // 11 wstring s2 = L"абракадабра"; cout << s2.size() << endl; // 22 подробнее

Показать сообщение отдельно
ValeryLaptev
Эксперт С++
1042 / 821 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
17.08.2011, 07:28
Цитата Сообщение от Сыроежка Посмотреть сообщение
На самом деле итератор - это шаблонный класс, моделирующий указатели. А для указателей, как известно, действует арифметика указателей, то есть произвольный доступ.
И итераторы именно появились из-за того, что появилась необходимость моделировать указатели для последовательностей, к которым встроенные указатели не подходят.

То есть главный смысл понятия итераторов - это моделирование указателей. То есть нельзя сказать, что итераторы используются исключительно для последовательного доступа. Иначе сразу же вылетают многие алгоритмы, начиная с простого алгоритма swap.
Не... Форма указателей - это только в С++, чтобы было как у массива. Для массива в языке есть естественный "итератор" - указатель. Поэтому в С++ "подогнали" синтаксис к этому "итератор". А вообще итератор ака Курсор - это один из паттернов. Реализован может быть как угодно. Не обязательно шаблонным классом. Может быть вообще - не класс... Много написал про это Элджер. У него вообще весьма хорошая книга про указатели.
Добавлю:

Доступ к элементам контейнера
Одной из важнейших характеристик является доступ к элементам контейнера. Обычно различают прямой, последовательный и ассоциативный доступ. Прямой доступ к элементу — это доступ по номеру (или, еще говорят, по индексу) элемента. Именно таким образом мы обращаемся к элементам массива, Выражение
v[7]
означает, что мы хотим оперировать элементом контейнера v, имеющим номер (индекс) 7. Нумерация элементов может начинаться, вообще говоря, с любого числа, однако в С++ принято нумерацию начинать с нуля, так как для массивов (которые являются частным случаем контейнера) принята именно такая нумерация.

Последовательный доступ отличается тем, что мы не имеем в распоряжении индексов элементов, зато можем перемешаться последовательно от элемента к элементу. Можно считать, что существует невидимая «стрелка»-индикатор, которую перемещают по элементам контейнера с помощью некоторого множества операций. Тот элемент, на который в данный момент «стрелка» показывает, называется текущим элементом.
Обычно набор операций последовательного доступа включает следующие:
- перейти к первому элементу,
- перейти к последнему элементу,
- перейти к следующему элементу,
- перейти к предыдущему элементу,
- перейти на n элементов вперед (от первого в сторону последнего элемента контейнера),
- перейти на n элементов назад (от конца к началу контейнера),
- получить (изменить) значение текущего элемента.

Эти операции могут быть представлены в функциональной форме, например, так
C++
1
2
3
4
5
6
7
next(v);            // перейти к следующему
prev(v);            // перейти к предыдущему
first(v);           // перейти к первому
last(v);            // перейти к последнему
current(v);         // получить текущий
forward(v, n);      // перейти на n элементов вперед 
back(v, n);         // перейти на n элементов назад
Те же операции, реализованные как методы класса (контейнера), можно представить таким образом:
C++
1
2
3
4
5
6
7
v.next();           // перейти к следующему
v.prev();           // перейти к предыдущему
v.first();          // перейти к первому
v.last();           // перейти к последнему
v.current();                // получить текущий
v.skip(n);          // перейти на n элементов вперед 
v.skip(-n);         // перейти на n элементов назад
Однако в С++ «стрелку»-индикатор удобнее представить в виде некоторого объекта, связанного с контейнером. Если этот объект имеет имя iv, то те же операции могут быть реализованы и так:
C++
1
2
3
4
5
6
7
iv = v.begin(); // перейти к первому
iv = v.last();      // перейти к последнему
++iv;               // перейти к следующему
--iv;               // перейти к предыдущему
iv+=n;          // перейти на n элементов вперед
iv-=n;          // перейти на n элементов назад
*iv             // получить значение текущего элемента
Не правда ли, очень похоже на указатель?! Однако это не указатель — в практике объектно-ориентированного программирования такой объект называется итератором. Итератор — это объект, обеспечивающий (последовательный) доступ к элементам контейнера. Итератор представляет собой более общую концепцию, чем указатель. В книге [17] итератор описан как один из паттернов программирования — Iterator.
6
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru