Определение оператора итератора C ++ - PullRequest
0 голосов
/ 12 декабря 2011

Любая идея или ссылка относительно "определения", как должны работать операторы итераторов?Чтобы быть более точным: как точно, например, должны быть реализованы операторы "==" и "! =" - должны ли они сравнивать элементы данных, которые они содержат (что, по-моему, было бы проблемой, как итераторне должны знать о данных в первую очередь)?Как вы сравниваете с .end () и .start ()?Для итераторов указателей: это просто проверка адреса?

Буду рад услышать ваши идеи или получить ссылку на определение.

Ответы [ 3 ]

4 голосов
/ 12 декабря 2011

Я думаю, вам нужно прочитать что-то вроде этого: http://stdcxx.apache.org/doc/stdlibref/iterators.html

Операторы == и != сравнивают итераторы, а не данные, к которым они относятся.

1 голос
/ 12 декабря 2011

Исходный STL имеет проектный документ на итераторах .

Короче говоря, они являются обобщением указателей, поэтому == должен проверить, указывают ли два итератора на один и тот же элемент втот же контейнер.Итераторы указателей должны действительно сравниваться равными, когда их указатели.

Сравнение с begin() или rbegin() должно быть тривиальным;сравнение с end() или rend() может быть выполнено различными способами, например, сделать его индексом равным size() контейнера.

0 голосов
/ 12 декабря 2011

Операторы == и! = Не должны сравнивать содержимое, они просто проверяют, ссылаются ли два итератора на один и тот же объект.

...