如何迭代 std::list<AbstractType*>

How to iterate std::list<AbstractType*>

本文关键字:何迭代 lt AbstractType gt list 迭代 std      更新时间:2023-10-16

我有这个列表:

std::list<AbstractType*> myList;

我怎么能迭代它,抓住每个对象,并执行他们的一些操作作为正常的实例?

在Java中,它类似于:

foreach(AbstractType object in myList)
    object.method();

如果您正在使用c++ 11,请参阅@Mankarse或@billz的答案。

如果你使用的是c++ 98,那么你应该像下面的例子那样做(或者通过一个等价的while循环):

#include <list>
#include <iostream>
int main()
{
    std::list<AbstractType*> l;
    // ...
    for (std::list<AbstractType*>::iterator i = l.begin(); i != l.end(); i++)
    {
        (*i)->DoSomething();
    }
    return 0;
}

编辑

正如@Mankarse在评论中指出的,在c++ 98中你也可以使用BOOST_FOREACH:

BOOST_FOREACH(AbstractType* pObject, l)
{
    pObject->DoSomething();
}

c++代码几乎相同:

for (AbstractType* object: myList)
    object->method();

使用c++ STL,您可以为此提供一个迭代器。在定义它之后,您可以使用begin()和end()方法。

如果不使用c++ 11,您可以创建一个作用于AbstractType的自由函数,并使用std::for_each调用它:

void doSomething(AbstractType& object) {
    object.doSomething();
}
int main() {
    // ...
    std::for_each(objects.begin(), objects.end(),
                  doSomething);
    // ...
}