0

我有这个清单:

std::list<AbstractType*> myList;

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

在 Java 中,它会是这样的:

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

4 回答 4

4

C++ 代码几乎相同:

for (AbstractType* object: myList)
    object->method();
于 2012-12-30T22:58:25.787 回答
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();
}
于 2012-12-30T23:06:08.790 回答
0

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

于 2012-12-30T22:57:53.313 回答
0

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

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

int main() {
    // ...
    std::for_each(objects.begin(), objects.end(),
                  doSomething);
    // ...
}
于 2012-12-31T00:08:50.707 回答