用c++编写自定义的for循环

Writing custom for loop in c++

本文关键字:for 循环 自定义 c++      更新时间:2023-10-16

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

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

我想为我编写的自定义容器(让它称为cust_cont)编写它,我想使用foreach循环(就像boost中的循环)。但是在阅读迭代器之类的之前,我想问一下,如果需要的话,我是否可以直接实现我想要的循环。

我不确定我理解你的问题,但是是的,你必须实现begin()end()方法(理想情况下在const上重载),以便迭代在你的自定义容器上工作。此外,还需要嵌套iteratorconst_iterator类型(或类型定义)。总而言之,以下是您需要的内容:

会员类型:

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++ 0x中添加的特性。

在c++ 0x中,你可以这样写:

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

其中c是类型为Element的对象的容器,并且已经将beginend定义为成员函数,OR可以传递给begin()end()函数,它们通过参数依赖查找(ADL)进行查找,std是关联的命名空间之一。

你可以写一个宏,像这样:

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

参见fredoverflow关于如何为自定义容器执行此操作的答案,但自c++11以来,使用auto

变得更容易了
for(auto element : container)
    //do something with element