我创建了一个集合类型的C ++实现。 我想添加迭代支持,以便开发人员可以在其上使用“for each”语句。 我怎么能这样做?
答案 0 :(得分:5)
标准习语是:公开类型iterator
和const_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
算法,你只需要一些代表标准begin
和end
容器方法的东西:迭代到逻辑中的第一个和一个过去的点容器
答案 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;
}