Вопрос по итератору функции begin () - PullRequest
0 голосов
/ 12 января 2020

Ниже ссылки, где я вижу, как функция начала итератора работает, но не совсем понятно.

https://secweb.cs.odu.edu/~zeil/cs361/web/website/Lectures/iterators/pages/implem.html

В их я вижу функцию начала, но не не понимаю, как это работает

  Book::iterator Book::begin()
  {
   Book::iterator it;
   it->pos = authors;
    return it;
  };

в этом it объект, но в этом it-> что делает, я думаю, что это перегружено с operator->() Я думаю, что это работает как it.operator->().pos, но я не После этого точно не знаю, почему он возвращает it. Мой вопрос: return it не дает ли я четкую картину для этого.

Ответы [ 2 ]

1 голос
/ 12 января 2020

Я почти уверен, что это ошибка, она должна быть просто it.pos = authors, поскольку она пытается установить значение итератора, а не разыменовывать итератор (который не инициализирован, поэтому, вероятно, обработает sh) и установить значение в указанном узле.

1 голос
/ 12 января 2020

Ваш class Book содержит struct AuthorListNode и указатель на тип struct AuthorListNode, который используется в качестве указателя на начальный узел в связанном списке:

class Book {
  struct AuthorListNode {
     Author data;
     AuthorListNode* next;
  };
  ...
private:
  ...
  AuthorListNode* authors;  // linked list of pointers to authors
  ...
};

В итераторе для Book::iterator Book::begin(), it->pos = authors; устанавливает pos член итератора it в начало вашего связанного списка, возвращая указатель it с инициализированным * pos членом, указывающим на начало связанного списка, позволяя вам выполнить итерацию с начала authors.

(примечание: AuthorIterator::pointer AuthorIterator::operator->() имеет return &(pos->data);, так как & AlanBirtles в своем ответе, используя it->pos, вполне может быть ошибкой в документация)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...