これは重複しているはずだとほぼ確信していますが、しばらく検索したところ、答えが見つかりませんでした。 C#のベクターとデキューを置き換えるためにC#で何を使用する必要がありますか効率的に。つまり、直接インデックス付けを効率的にサポートし、効率的な方法で(ベクターまたはデキューのケースに応じて)一端または両端からの削除もサポートする構造が必要です。
Java通常、少なくともベクターにはArrayListを使用しますが、C#の場合は this source と表示されます:ArrayList resizes dynamically. As elements are added, it grows in capacity to accommodate them. It is most often used in older C# programs.
。これを行うための新しい方法は何ですか?そして再び、私はデキューの場合のために何をしますか?
組み込みのDequeコンテナはありませんが、いくつかの実装が利用可能です。
これが Stephen Cleary の良い例です。これにより、O(1)の操作がインデックス付けされ、最初に挿入され、最後に追加されます。
Vectorに相当するC#は List<T>
。インデックス付きアクセスはO(1)ですが、挿入または削除はO(N)です(O(1)である末尾への挿入以外))。
C#vector
の場合、適切な候補は System.Collection.Generic.List
他の人が述べたように。
C++の両端キューに最も近いものは System.Collection.Generic.LinkedList
これは二重にリンクされたリストです。
考慮してくださいSystem.Collections.Generic.List
とその他のSystem.Collection.Generic
彼らは彼らと同じ目的を果たしますC++
相当。
さらに、コンテナが増える場合があります。 こちら を見てください。
インデックス操作を行うことはできませんが、linkedlistはおそらく、最初にデキューを実装し、一定の時間で最後にデキューを実装するのに最も近いものの1つです。