リストをいつ使用するかは理解できますが、ビデオゲームでリストを使用するよりもベクターを使用する方がよい場合はわかりません。高速ランダムアクセスを使用する方がよい場合
(そして、ポインタを削除/追加するだけなので、リストに挿入/削除する方が速い理由を理解していますが、それでも対応するアイテムを見つける必要があります...)
container
。
リストをいつ使用するかは理解できますが、ビデオゲームでリストを使用するよりもベクターを使用する方がよい場合はわかりません。高速ランダムアクセスを使用する方がよい場合
(そして、ポインタを削除/追加するだけなので、リストに挿入/削除する方が速い理由を理解していますが、それでも対応するアイテムを見つける必要があります...)
container
。
回答:
私の経験則、と私は確信してこの上の議論があるだろうよ、することです決してリストを使用しない(あなたは非常に、非常に頻繁に大規模なリストの途中から物事を削除する必要がない場合)。
コンテナ内のすべての要素を連続したメモリに置くことで得られる速度(したがって、よりキャッシュに優しい)は、ベクトルの追加/削除/サイズ変更の追加コストを相殺する価値があります。
編集:少しだけ明確にするために、言うまでもなく、特定のニーズに関連するデータセットを備えたプラットフォームで、「高速な」質問をテストする必要があることは言うまでもありません。要素のコレクションが必要な場合は、正当な理由がない限り、ベクター(またはdeque、ほとんど同じ)を使用します。
あなたの選択はあなたのニーズを反映すべきです。ベクトルのすべての要素はメモリ内で連続しており、リストには次/前の要素へのポインタがあるため、それぞれに利点/欠点があります。
リスト:
ベクトル:
したがって、プログラムは頻繁に要素を追加および削除する必要があるが、前に他の要素を必要とせずに特定の要素にアクセスしない(またはめったにアクセスしない)場合にリストが優れています。アクセス時間を短縮するためにベクトルを使用する必要がありますが、要素を削除または追加する必要がある場合は効率が低下します。
stackoverflowでこの投稿を確認してください。回答に応じて特定のコンテナに移動する、ニーズに関する基本的な質問を含む本当に素晴らしいグラフが表示されます。
通常、リストは、追加操作や削除操作が多いキューなどの構造に使用されます。例:更新する必要のあるエンティティの絶えず変化するリスト。リスト自体には画面上のエンティティのみが含まれるため、頻繁に変更されます。
ベクター(または配列)は、それほど変化しないコレクションや、コレクション内の個々のアイテムへの高速アクセスが必要なコレクションに適しています。例:特定のインデックスでタイルを検索する必要があるタイルマップ。
Tetradsの意見は正しいかもしれませんが、使用されるプログラミング言語に依存します。質問c++
にタグを付けたようですが、言語固有ではない回答をしようとしました。
コンソールゲームでは、std :: listを使用することはありません。
std :: vectorでさえ、コンソールで好意を失っています:
struct point{float x, y, z, w}; std::vector<point> positions;