Почему нельзя вычесть итераторы у forward_list? C++

Написал вот такой код:

std::forward_list flist{1, 2, 3, 4, 5};
std::cout << flist.begin() - flist.end() << "\n";

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


Ответы (1 шт):

Автор решения: gbg

С тем, что это итераторы категории forward_iterator_tag, у них нет оператора вычитания.

И это логично, потому что вычитание таких итераторов потребовало бы три (!) прохода по списку (определить номер элемента в списке для первого (первый проход) и второго (второй проход) элемента, потом найти в списке элемент, номер которого соответствует разности (третий проход)).

Чтобы подчеркнуть этот факт семантически, оператор убрали - иначе можно будет легким движением руки (заменой вектора н список) превратить приложение в тормозилку.

→ Ссылка