我有这个清单:
std::list<AbstractType*> myList;
如何迭代它,抓取每个对象并将其操作作为普通实例执行?
在Java中,它将类似于:
foreach(AbstractType object in myList)
object.method();
答案 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);
// ...
}