現在自作アレンジのタスクシステムを使って弾幕STGを作っていますが、
やはりstd::listの方が高速?らしいです
次はstd::listにも挑戦してみたいのですが、いくつか聞きたいことがあります
まず、画面外に出た弾を削除する方法です
remove_ifにif(Bullet->used==False)と書けば大丈夫でしょうか?
次に、クラスの継承です
基底クラスでlistを作れば、継承クラスも全部そのlistで管理できるのでしょうか?
std::listへの挑戦
Re: std::listへの挑戦
>std::listの方が高速?らしいです
何と比べて高速なのか?って話ですね.
「fps的に数千個とか数万個とかいけるw」とかいうことと「それはそれとして,実際には何個くらいを扱うのか」は異なります.
データ構造的にlistだろう,とか思って実装しても
「現実に扱っている個数ならばvectorで問題なかったというか(予想に反して)そっちのが圧倒的に早かった」とかいうことが割とよくあります.
>基底クラスでlistを作れば、継承クラスも全部そのlistで管理できるのでしょうか?
これは「基底クラスの配列を作れば,その配列で派生クラスを管理できますか?」と訊いているのと同じです.
もし配列でやるならば「基底クラスのポインタ型の配列を作ると良さそう」という話であれば,
listでやるならば「基底クラスのポインタ型のリストを作ると良さそう」ということになるのではないかと思います.
>remove_ifにif(Bullet->used==False)と書けば大丈夫でしょうか?
例えば,上記のようなポインタ型のlistを扱っている場合
当然,"listの要素 : ポインタ" を単純に削除してもそのポインタが指し示していた先には何も影響しないことになるので
remove_ifで削除で大丈夫かどうか? と言われるとそれだけでは判断できません.
何と比べて高速なのか?って話ですね.
「fps的に数千個とか数万個とかいけるw」とかいうことと「それはそれとして,実際には何個くらいを扱うのか」は異なります.
データ構造的にlistだろう,とか思って実装しても
「現実に扱っている個数ならばvectorで問題なかったというか(予想に反して)そっちのが圧倒的に早かった」とかいうことが割とよくあります.
>基底クラスでlistを作れば、継承クラスも全部そのlistで管理できるのでしょうか?
これは「基底クラスの配列を作れば,その配列で派生クラスを管理できますか?」と訊いているのと同じです.
もし配列でやるならば「基底クラスのポインタ型の配列を作ると良さそう」という話であれば,
listでやるならば「基底クラスのポインタ型のリストを作ると良さそう」ということになるのではないかと思います.
>remove_ifにif(Bullet->used==False)と書けば大丈夫でしょうか?
例えば,上記のようなポインタ型のlistを扱っている場合
当然,"listの要素 : ポインタ" を単純に削除してもそのポインタが指し示していた先には何も影響しないことになるので
remove_ifで削除で大丈夫かどうか? と言われるとそれだけでは判断できません.