如何迭代std :: list <abstracttype *> </abstracttype *>

时间:2012-12-30 22:55:43

标签: c++ iterator std

我有这个清单:

std::list<AbstractType*> myList;

如何迭代它,抓取每个对象并将其操作作为普通实例执行?

在Java中,它将类似于:

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

4 个答案:

答案 0 :(得分:4)

C ++代码几乎完全相同:

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

答案 1 :(得分:4)

如果您使用的是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();
}

答案 2 :(得分:0)

使用C ++ STL你有一个迭代器。在定义它之后,使用begin()和end()方法。

答案 3 :(得分:0)

如果不使用C ++ 11,您可以在AbstractType上创建一个自由函数,并使用std::for_each调用它:

void doSomething(AbstractType& object) {
    object.doSomething();
}

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