【发布时间】:2020-05-02 13:01:35
【问题描述】:
我制作了“距离”模板函数来计算两个迭代器之间的距离。在函数中,我对情况进行了划分,一种用于随机访问迭代器,另一种用于随机访问迭代器。它可以很好地检测带有 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);
我试图在没有“最后 - 第一个”的情况下制作距离函数,如下所示
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);
}
但它仍然会产生同样的错误。我该如何解决这个问题?
【问题讨论】: