如何在C+;中向自己的集合类添加foreach迭代支持+;? 我创建了一个C++类型的集合实现。 我想添加迭代支持,以便开发人员可以在其上使用“for-each”语句。 我该怎么做呢?
假设你指的是每个算法的如何在C+;中向自己的集合类添加foreach迭代支持+;? 我创建了一个C++类型的集合实现。 我想添加迭代支持,以便开发人员可以在其上使用“for-each”语句。 我该怎么做呢?,c++,foreach,iteration,C++,Foreach,Iteration,假设你指的是每个算法的,您只需要表示标准的begin和end容器方法的东西:指向逻辑容器中第一个端点和一个过去端点的迭代器。标准习惯用法是:公开类型iterator和const\u迭代器,并至少提供两个函数,即begin()和end() template</*.....*/> class Collection { public: typedef /*...*/ iterator; typedef /*...*/ const_iterator; ite
,您只需要表示标准的begin
和end
容器方法的东西:指向逻辑容器中第一个端点和一个过去端点的迭代器。标准习惯用法是:公开类型iterator
和const\u迭代器
,并至少提供两个函数,即begin()
和end()
template</*.....*/>
class Collection
{
public:
typedef /*...*/ iterator;
typedef /*...*/ const_iterator;
iterator begin();
iterator end();
const_iterator begin() const;
const_iterator end() const;
};
模板
类集合
{
公众:
typedef/*…*/迭代器;
typedef/*…*/const_迭代器;
迭代器begin();
迭代器end();
常量迭代器begin()常量;
常量迭代器end()常量;
};
一旦您实现了这些,您的集合就可以用于std::for_each
,以及在
中定义的许多其他算法函数中。如果您指的是STL的for_each
算法,您只需要像STL容器一样定义begin()
和end()
如果您指的是C++0x基于范围的for循环,那么您可以做同样的事情。使用名称空间std;
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;
}
//非常简单的容器类
类Cont{
公众:
Cont(){}
typedef char*迭代器;
迭代器begin(){return arr;}
迭代器end(){return&arr[200];}
私人:
char-arr[200];
};
void setit(char&it){
它='a';
}
//迭代器必须为每个算法提供++操作(本例中的char*就是这样工作的)
int main(){
续c;
对于每个(c.begin()、c.end()、setit);
复制(c.begin(),c.end(),ostream_迭代器(cout,“,”);
返回0;
}
c++没有foreach语句。在C++11中有一种for循环,它执行foreach-你的意思是?你的意思是说它可以在for循环中使用吗?或者你在看BOOST_FOREACH?我想VisualStudio2008有一个FOREACH实现我在这里看到了。。。没有意识到它只在C++中。该死的微软@Che:那是标准C++。foreach应该是C++/CLI…