我有一个模板化的功能
template<typename It>
void Foo(It first, It second)
{
It third = first;
Bar(first, second, third);
}
调用另一个模板化函数
template<typename It>
void Bar(It first,It second,It third)
{
for(It j= first + 2; j < second; j++)
{
third++;
}
}
当我使用代码
致电Foo
时
std::list<int> l{ 3, 8, 2, 5, 1, 4, 7, 6 };
Foo(l.begin(), l.end());
我在引用
行时遇到了几个错误for(It j= first + 2; j < second; j++)
在Foo中。第一条错误消息是
错误C2784'std :: reverse_iterator&lt; _RanIt&gt;的std ::操作 +(reverse_iterator&lt; _RanIt&gt; :: difference_type,const std :: reverse_iterator&lt; _RanIt&gt;&amp;)':无法推断出模板参数 对于'const std :: reverse_iterator&lt; _RanIt&gt; &安培;”从 'int'AlgorithmsTests
我需要更改什么才能使代码段有效?
答案 0 :(得分:4)
该行
for(It j= first + 2; j < second; j++)
It
为std::vector<int>::iterator
时,应该不是问题。但是,这不一定适用于所有类型的迭代器。请改用std::advance
。
此外,j < second
也不适用于非随机访问迭代器。谢谢,@ T.C。
使用:
It j = first;
std::advance(j,2);
for( ; j != second; j++)
另一个,更优雅的选择(谢谢,@ AnT):
for( It j = std::next(first, 2) ; j != second; j++)