Шаг 12 - Понимание итератора

Вы должны воспринимать итератор на данный момент, как указатель C++. В общем случае это одно и тоже. Давайте посмотрим как применить алгоритм find к массиву C. Массив это и есть набор указателей вроде как.

// TestIter.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream.h"
#include "algorithm"

using namespace std;

#define ARRAY_SIZE 10
int Arr[ARRAY_SIZE];


void main()
{
	for (int x=0;x < ARRAY_SIZE;x++) Arr[x]=x;

	int* rezult=find(Arr,Arr+ARRAY_SIZE,3);
	if (rezult==Arr+ARRAY_SIZE)
		cout << "Not Found 3 " << endl;
	else cout << "Yes 3" << endl;

}

Вот смотрите, мы с вами передали в функцию find два указателя. Указатель начала массива и указатель конца массива. Это и есть как их называют - итераторы. При нахождении вам вернется итератор значения, чтобы проверить, что ничего нет мы проверяем с итератором за концом массива.

Вы уже видели, как используются подобные функции типа begin() и end() для получения начала и конца итераторов. Главный вопрос почему не пользоваться указателями ??? Не получится. Представим массив из структур.

struct A
{
	int x;
	int y;
	char buffer[100];
};

В С[100];

Так вот для того, чтобы работать с указателями вы должны делать примерно так.

A* D;
D=D+sizeof(A);

Только так вы можете идти от одной структуры к другой. И теперь самое главное. ЭТО МОЖНО ТОЛЬКО ЕСЛИ СТРУКТУРЫ РАСПОЛОЖЕНЫ ЛИНЕЙНО, то есть одна за другой. Тут же мы получим ограничение на то, что блок памяти должен быть непрерывный. Это очень не удобно и ограничивает размер при наличии памяти. Выход только один ЗАВЕСТИ ОТДЕЛЬНЫЙ МАССИВ С ИТЕРАТОРАМИ(указателями). В нем будут линейно храниться указатели на элементы. Ну и что скажете Вы ? Все равно нужен линейный блок памяти. Нужет только структуры могут быть по размеру очень большими. Даже в моем примере на место данной структуры можно поместить массу указателей. И теперь размер ограничивается непрерывной памятью для указателей. Это намного больше, кроме того сами структуры могут быть рассортированны по всей памяти.

Итак, давайте попробуем сформулировать, что такое итератор на данной степени понимания. Это массив указателей на элементы структур.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 12.02.2000