我有这个清单:
std::list<AbstractType*> myList;
我如何迭代它,抓取每个对象并将它们的一些操作作为普通实例执行?
在 Java 中,它会是这样的:
foreach(AbstractType object in myList)
object.method();
C++ 代码几乎相同:
for (AbstractType* object: 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++ 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);
// ...
}