如何在C ++中将foreach迭代支持添加到我自己的集合类中?

时间:2011-08-16 17:21:17

标签: c++ foreach iteration

我创建了一个集合类型的C ++实现。 我想添加迭代支持,以便开发人员可以在其上使用“for each”语句。 我怎么能这样做?

4 个答案:

答案 0 :(得分:5)

标准习语是:公开类型iteratorconst_iterator,并提供至少两个函数,即begin()end()

template</*.....*/>
class Collection
{
 public:
     typedef /*...*/ iterator;
     typedef /*...*/ const_iterator;

     iterator begin();
     iterator end();

     const_iterator begin() const;
     const_iterator end() const;
};

实现这些后,您的集合可以在std::for_each中使用,也可以在<algorithm>中定义的许多其他算法函数中使用。

答案 1 :(得分:1)

假设你的意思是for_each算法,你只需要一些代表标准beginend容器方法的东西:迭代到逻辑中的第一个和一个过去的点容器

答案 2 :(得分:1)

如果您指的是STL的for_each算法,您只需像STL容器一样定义begin()end()

如果你的意思是C ++ 0x的基于范围的for循环,那么你可以做同样的事情。

答案 3 :(得分:0)

using namespace std;

// very very simple container class
class Cont {
public:
    Cont() {}
    typedef char* iterator;
    iterator begin() {return arr;}
    iterator end() {return &arr[200];}

private:
    char arr[200];
};

void setit(char &it) {
    it = 'a';
} 
// iterator must provide ++ operation for for_each algorithm (char* in this example works this way)
int main() {
    Cont c;
    for_each(c.begin(), c.end(), setit);
    copy(c.begin(), c.end(), ostream_iterator<char>(cout, ","));
    return 0;
}