如何在c++中为自己的集合类添加foreach迭代支持?

How do I add foreach iteration support to my own collection class in C++?

本文关键字:foreach 添加 迭代 支持 集合类 自己的 c++      更新时间:2023-10-16

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

标准成语是:公开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>中定义的许多其他算法函数中使用。

假设您指的是for_each算法,您只需要一些代表标准beginend容器方法的东西:到逻辑容器的第一个点和第一次结束点的迭代器。

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

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

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;
}