2011-08-04 8 views
57

C++ベクタのC#に相当するものは何ですか?C#のベクトルに相当する、連続したメモリを持つベクトル?

私はこの機能を探しています:

標準配列対のアクセスのためのパフォーマンスの低下を持っていない連続して格納されたメモリの動的配列を持つために。

ので、私が探していた、彼らは.NET equivalent to the vector in C++ is the ArrayListを言う:

ドゥArrayListには、その連続したメモリ機能を持っていますか?

+4

あなたが指定した(あるいは一貫期待)するための構造がメモリに割り当てられているか、金属に十分に近いCLRはありませんか? – Aphex

答えて

68

を使用できます。Tが値タイプの場合、Tが参照タイプの場合には当てはまらない連続したメモリに割り当てられます。

例:

List<int> integers = new List<int>(); 
integers.Add(1); 
integers.Add(4); 
integers.Add(7); 

int someElement = integers[1]; 
+1

いくつか例を挙げてください。 – cMinor

+2

@cMinor、 'List 'クラスのドキュメントには多くの例がありますが、私は答えを更新しました。 –

+4

私はCLRに100%精通しているわけではありませんが、 'T'が参照型であっても、連続したメモリが残っていることは理にかなっています。それは基本的にポインタの配列です... – josaphatv

14

使用List<T>。内部的には配列を使用し、配列は連続したメモリを使用します。

+6

+1。なぜ人々は 'ArrayList'について言及することを主張しているのですか? –

+1

完全に真実ではありません。 Tが参照型の場合、連続したメモリは存在しません。 –

+2

@Matteoもしあなたがソースを見るならば、 'private T [] _items; 'があります。これはバックエンドの格納、参照の型に使われているかどうかです。 –

12

C#には多くの参照型があります。でも参照が連続して、オブジェクト自体がヒープすべての

12

まず点在することができるコンテナ店舗場合、ArraylistまたはHashtableから離れて。これらのクラスは、ジェネリックスを支持して廃止予定とみなされます。彼らはまだ伝統的な目的のための言語になっています。

あなたが探しているのは、List<T>クラスです。 Tが値型の場合、明示的な理由からTが参照型ではない場合、連続したメモリを持つことに注意してください。

関連する問題