Итератор: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м откат правок 194.85.204.24 (обс) к версии РоманСузи
м Разрешение значений с помощью бота: Массив — изменение ссылок на Массив (программирование); косметические изменения
Строка 12:
 
=== Отличия от индексации ===
В процедурных языках программирования широко используется индексация, основанная на [[счётчик цикла|счётчике цикла]] для перебора всех элементов последовательности, например, [[массивМассив (программирование)|массива]]а. Хотя индексация может использоваться совместно с некоторыми объектно-ориентированными контейнерами, использование итераторов даёт свои преимущества:
 
* Индексация не подходит для некоторых структур данных, в частности, для структур данных с медленным [[произвольный доступ|произвольным доступом]] или вообще без поддержки такового (например, [[Список (информатика)|список]] или [[Дерево (структура данных)|дерево]]).
Строка 73:
 
=== Оберон ===
Обычное обращение к [[Переменная|переменным]], составляющим [[Массив (программирование)|ряд]], осуществляется по их номеру. При этом адрес требуемой переменной вычисляется как: «адрес 1-й переменной» + «размер переменной» x «заданный номер». При последовательном обращении к таким переменным можно получить значительный выигрыш производительности, если вычислять адрес последующей переменной через адрес предыдущей. Для этого и применяется бегунок. Вид переменных, составляющих ряд, к которым будет осуществляться последовательное обращение, называется опорным видом бегунка, а число переменных ряда, на которое будет перемещаться бегунок после каждого такого обращения, называется шагом бегунка. Шаг бегунка задаётся как целая постоянная. Если при объявлении вида шаг бегунка не указан, то считается, что шаг равен 1.
 
=== C++ ===
Строка 84:
<source lang="cpp">
ContainerType C; // Любой стандартный тип контейнера, например std::list<sometype>
//for (ContainerType::iterator it = C.begin(),end = C.end(); it != end; ++it) { для изменяемого итератора
//(если вам нужно изменять элементы)
for (ContainerType::const_iterator it = C.begin(),end = C.end(); it != end; ++it) {
Строка 103:
<source lang="cpp">
ContainerType<ItemType> C; // Любой стандартный тип контейнера элементов ItemType
void ProcessItem( const ItemType& I ) // Функция, обрабатывающая каждый элемент коллекции
{
std::cout << I << std::endl;
}
 
std::for_each( C.begin(), C.end(), ProcessItem ); // Цикл просмотра
</source>
 
Строка 120:
<source lang="java">
Iterator iter = list.iterator();
//Iterator<MyType> iter = list.iterator(); в J2SE 5.0
while (iter.hasNext())
System.out.println(iter.next());