ただし、リンクされたリストの 場合には、挿入/欠失の位置を見つけるプロセスは、我々は、大規模なデータを持っている特別な場合、(シーケンシャルサーチ) アレイ(ランダムアクセス)に比べて非常に高価です。あなたはそれがどこにあるか知っていて、それへのポインタまたはインデックスのように持っていない場合
ランダムアクセスを使用すると、要素を検索する場合、何も解決しないと、それがどこにあるかわからない、と、もはやありませんリンクされたリストや配列を使用している場合でも、要素にアクセスするための検索。この場合、ランダムアクセスが役立つのは、配列がソートされている場合のみです。この場合、ランダムアクセスによってバイナリ検索が可能です。
この要素は、配列上のリンクリストの挿入/削除の効率を大幅に低下させますか?または、配列の場合に要素を押し出すためには、より大きな問題 が必要ですか? 順次アクセスよりも問題がありますか?
一般に、配列とリンクリストの両方には、要素を見つけるために線形時間の検索が必要なので、少なくとも順序付けられていない配列はありません。そして、人々が重要でない入力サイズに対して頻繁に重要なパスを探す必要がある場合、ハッシュテーブルやバランスのとれたバイナリツリーや試行などを使用することがよくあります。
多くの場合、アルゴリズムの複雑さに関係しないため、多くのパフォーマンスクリティカルなフィールドでリンクリストより配列が優先されます。なぜなら、配列は要素を連続して格納することが保証されているからです。これは、逐次処理のための参照の非常に良いローカリティを提供します。
また、一定時間内にアレイから削除する方法もあります。一例として、配列からn番目の要素を一定時間に削除したい場合は、配列の最後の要素と交換し、最後の要素を一定時間内に削除します。要素を並べ替えることが許されている場合、ギャップを閉じるために必ずしもすべての要素をシャッフルする必要はありません。
リンクされたリストは、ノードを連続して保存する場合と保存しない場合があります。ノードを配列に格納する場合(配列ベースのコンテナまたはアロケータのいずれかを使用)のように、パフォーマンスクリティカルなコンテキストでは、多くの場合、それらは便利です。さもなければそれらをトラバースすると、アクセスされているすべての単一ノードの潜在的にキャッシュミスを伴うキャッシュミスが発生することがあります。
パフォーマンスを比較した素晴らしいグラフ(一番下の行はベクトル表示の非効率性と格納された要素のサイズの増加です)https://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque .html – orhtej2