我对比较C ++中的迭代器感到很困惑。使用以下代码:
std::iterator< std::forward_iterator_tag, CP_FileSystemSpec> Iter1;
std::iterator< std::forward_iterator_tag, CP_FileSystemSpec> Iter2;
while( ++Iter1 != Iter2 )
{
}
错误是:
error: no match for 'operator++' in '++Iter1'
我似乎记得你无法做上面代码所做的事情。但我不太清楚如何进行比较。
答案 0 :(得分:6)
std::iterator
本身不是一个迭代器,但是其他迭代器可以继承的基类来获得一些标准的typedef。
template<class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&>
struct iterator
{
typedef T value_type;
typedef Distance difference_type;
typedef Pointer pointer;
typedef Reference reference;
typedef Category iterator_category;
};
答案 1 :(得分:2)
此错误与比较无关 - 它告诉您该特定迭代器不支持递增。
答案 2 :(得分:2)
你应该从std::iterator
派生 - 直接实例化是没有意义的。
答案 3 :(得分:0)
要使该示例有效,请使用由序列支持的迭代器,例如vector
:
std::vector<int> foo(10); // 10 times 0
std::vector<int>::iterator it1 = foo.begin();
std::vector<int>::iterator it2 = foo.end();
while(++it1 != it2) {
// do stuff
}
请注意,这不是迭代集合的规范方法。它也很棘手,因为它会跳过序列的第一个元素。使用此:
for(std::vector<int>::iterator it = foo.begin(); it != foo.end(); it++) {
// do stuff
}