Я сделал шаблонную функцию «расстояние» для расчета расстояния между двумя итераторами. В функции я делю случаи, один для итератора произвольного доступа, а другой. Он хорошо определяет тип итератора с iterator_traits, но я не могу использовать эту функцию с двунаправленным итератором.
Вот моя функция расстояния
template <typename Iter>
ptrdiff_t distance(Iter first, Iter last)
{
typedef typename std::iterator_traits<Iter>::iterator_category type;
ptrdiff_t dist = 0;
if (typeid(type) == typeid(std::random_access_iterator_tag)) {
return last - first;
}
for (; first != last; ++first)
dist++;
return (dist);
}
Вот основной код, который я пытаюсь проверить
int main(void)
{
std::list<int> li;
li.push_back(100);
std::cout << ft::distance(li.begin(), li.end()) << std::endl;
return (0);
}
Это сообщение об ошибке
./iterator.hpp:149:16: error: invalid operands to
binary expression ('std::_List_iterator<int>' and
'std::_List_iterator<int>')
return (last - first);
Я пытался сделать функцию расстояния без "last - first" что-то вроде ниже
template <typename Iter>
static ptrdiff_t subtract(Iter first, Iter last)
{
return (last - first);
};
template <typename Iter>
ptrdiff_t distance(Iter first, Iter last)
{
typedef typename std::iterator_traits<Iter>::iterator_category type;
ptrdiff_t dist = 0;
if (typeid(type) == typeid(std::random_access_iterator_tag)) {
return subtract(first, last);
}
for (; first != last; ++first)
dist++;
return (dist);
}
Но все равно выдает ту же ошибку. Как я могу решить эту проблему?