C++ 在c+中为循环编写自定义+;

C++ 在c+中为循环编写自定义+;,c++,for-loop,overloading,C++,For Loop,Overloading,我想知道这是否可能,一个自定义的循环。我想到的是来自java的foreach表达式,它是 for(Container c : Element e){ // do stuff with e } 我想为我编写的定制容器编写它(我们称之为cust_cont),我想使用foreach循环(比如boost中的循环)。但是在阅读迭代器之类的东西之前,我想问一下,如果需要的话,我是否可以直接实现我想要的循环。这样的循环称为基于范围的循环,这是C++0x中添加的一个特性 因此,在C++0x中,可

我想知道这是否可能,一个自定义的循环。我想到的是来自java的foreach表达式,它是

for(Container c : Element e){
      // do stuff with e
} 
我想为我编写的定制容器编写它(我们称之为cust_cont),我想使用foreach循环(比如boost中的循环)。但是在阅读迭代器之类的东西之前,我想问一下,如果需要的话,我是否可以直接实现我想要的循环。

这样的循环称为基于范围的循环,这是C++0x中添加的一个特性

因此,在C++0x中,可以编写以下代码:

for(Element e : c) {
      // do stuff with e
} 

其中,
c
是类型为
元素
的对象的容器,它已将
begin
end
定义为成员函数,或者可以传递给使用参数相关查找(ADL)查找的
begin()
end()
函数,std是一个相关的名称空间。

您可以编写一个宏,如下所示:

foreach(Element, e, c) { ... }

我不确定我是否理解您的问题,但是是的,您必须实现
begin()
end()
方法(最好是在
const
上重载),以便在自定义容器上进行迭代。此外,还需要嵌套的
迭代器
常量迭代器
类型(或typedef)。总而言之,以下是您需要的:

成员类型:

MyClass::iterator
MyClass::const_iterator
成员职能:

MyClass::iterator MyClass::begin();
MyClass::const_iterator MyClass::begin() const;
MyClass::iterator MyClass::end();
MyClass::const_iterator MyClass::end() const;
请参见如何为自定义容器执行此操作,但自c++11以来,使用auto变得更加容易

for(auto element : container)
    //do something with element

如果您使用的是C++0x,那么这已经是一项功能。否则我猜不会,至少不会使用for关键字,因为这需要另一种语法。@RedX:我想问题是在没有为自定义容器实现迭代器的情况下使用该语法。我从来不知道这是有效的。。我想我应该更彻底地阅读0x文档。Thanks@Nawaz:它是
std::begin
std::end
,还是可以通过典型的ADL找到的自由函数
begin
end
<代码>交换使用ADL,例如。@Matthieu:你说得对。他们被ADL查到了。编辑了答案。谢谢:-)@Nawaz:我对C++0x还不太清楚,我把这归咎于缺乏经验:D我注意到Clang3.0似乎提供了它,很好:D