比较C ++中的迭代器

时间:2011-06-05 20:03:32

标签: c++ iterator

我对比较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'

我似乎记得你无法做上面代码所做的事情。但我不太清楚如何进行比较。

4 个答案:

答案 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
}