当我尝试使用std::distance
一个自定义的迭代器下GCC 4.7,它抱怨没有找到difference_type
。我很遗憾不知道为什么它失败了。difference_type没有找到
#include <iterator>
class nit {
public:
typedef int difference_type;
};
int main() {
const nit test1;
std::distance(test1, test1);
return 0;
}
给出了错误:
/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h:114:5: error: no type named ‘difference_type’ in ‘struct std::iterator_traits<nit>’
这里可能是解决方案:http://www.cplusplus.com/forum/general/11428/。 –
尝试从实例继承类['标准:: iterator'(http://en.cppreference.com/w/cpp/iterator/iterator)。我可以想象,'std :: iterator_traits'只专门用于那些继承它的东西。 –
进一步说,我可以用'类尼特进一步得到:公众的std ::迭代器<性病:: random_access_iterator_tag,T,int>的''但需要T'是一个非void类型,您需要提供'operator-'这个工作。或者,你可以有一个'bidirectional_iterator_tag',但你需要提供增量器和比较器。 –