私はこのリストを持っています:
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);
// ...
}