web-dev-qa-db-ja.com

c ++ vectorまたはdequeと同等のc#

これは重複しているはずだとほぼ確信していますが、しばらく検索したところ、答えが見つかりませんでした。 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.。これを行うための新しい方法は何ですか?そして再び、私はデキューの場合のために何をしますか?

24

組み込みのDequeコンテナはありませんが、いくつかの実装が利用可能です。

これが Stephen Cleary の良い例です。これにより、O(1)の操作がインデックス付けされ、最初に挿入され、最後に追加されます。

Vectorに相当するC#は List<T> 。インデックス付きアクセスはO(1)ですが、挿入または削除はO(N)です(O(1)である末尾への挿入以外))。

18
Matthew Watson

C#vectorの場合、適切な候補は System.Collection.Generic.List 他の人が述べたように。
C++の両端キューに最も近いものは System.Collection.Generic.LinkedList これは二重にリンクされたリストです。

9
Dale Wick

考慮してくださいSystem.Collections.Generic.Listとその他のSystem.Collection.Generic彼らは彼らと同じ目的を果たしますC++相当。
さらに、コンテナが増える場合があります。 こちら を見てください。

3
bash.d

インデックス操作を行うことはできませんが、linkedlistはおそらく、最初にデキューを実装し、一定の時間で最後にデキューを実装するのに最も近いものの1つです。

https://docs.Microsoft.com/en-us/dotnet/api/system.collections.generic.linkedlist-1.removefirst?view=netframework-4.8

0
re3el