Почему нельзя вычесть итераторы у forward_list? C++
Написал вот такой код:
std::forward_list flist{1, 2, 3, 4, 5};
std::cout << flist.begin() - flist.end() << "\n";
Почему компилятор выдает ошибку о том, что у итераторов нет оператора вычитания? С чем связано отсутствие возможности у однонаправленного связного списка вычесть итераторы?
Ответы (1 шт):
С тем, что это итераторы категории forward_iterator_tag, у них нет оператора вычитания.
И это логично, потому что вычитание таких итераторов потребовало бы три (!) прохода по списку (определить номер элемента в списке для первого (первый проход) и второго (второй проход) элемента, потом найти в списке элемент, номер которого соответствует разности (третий проход)).
Чтобы подчеркнуть этот факт семантически, оператор убрали - иначе можно будет легким движением руки (заменой вектора н список) превратить приложение в тормозилку.