std :: listを反復処理するアイテムのポインター
質問
私は非常に基本的なゲームに取り組んでおり、自分のゲームに関連するオブジェクトのstd :: listコレクションを持っています。次のように宣言しました:
std::list<Target> targets;
を使用して繰り返し処理する場合、
for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
Target t = *iter;
t.move();
}
GUIでオブジェクトが更新されません。ただし、反復ループを targets.front()。move()
に置き換えると、1つのオブジェクトが正しく移動します。これは、ポインタを使用してコレクションを反復処理していないためだと思います。誰もそれがどのように行われているのか説明できますか?ありがとう。
解決
オブジェクトをコピーしています。次のようにしてください:
*iter.move()
Target t = * iter;
を使用する場合、本来目的のオブジェクトを移動するのではなく、オブジェクトのコピーを作成して移動します。
xtoflが言ったように(thx)参照も取得できます。
Target &t = *iter;
t.move();
所属していません StackOverflow