0

私はこのリストを持っています:

std::list<AbstractType*> myList;

どうすればそれを繰り返し、各オブジェクトを取得し、それらの操作の一部を通常のインスタンスとして実行できますか?

Javaでは、次のようになります。

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

4 に答える 4

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 に答える
4

C++ コードはほぼ同じです。

for (AbstractType* object: myList)
    object->method();
于 2012-12-30T22:58:25.787 に答える
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 に答える