无法从int

时间:2017-03-17 05:49:31

标签: c++ c++11 templates visual-c++

我有一个模板化的功能

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

我需要更改什么才能使代码段有效?

1 个答案:

答案 0 :(得分:4)

该行

for(It j= first + 2; j < second; j++)
Itstd::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++)