C # эквивалент вектора C ++, с непрерывной памятью? - PullRequest
72 голосов
/ 04 августа 2011

Что такое эквивалент C # вектора C ++?

Я ищу эту функцию:

Иметь динамический массив непрерывно хранимой памяти, который не снижает производительность по сравнению со стандартными массивами.

Я искал, и они говорят .NET equivalent to the vector in C++ is the ArrayList, поэтому:

Имеет ли ArrayList эту непрерывную функцию памяти?

Ответы [ 5 ]

87 голосов
/ 04 августа 2011

Вы можете использовать List<T>, и когда T является типом значения, он будет размещен в смежной памяти, что было бы невозможно, если T является ссылочным типом.

Пример:

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

int someElement = integers[1];
15 голосов
/ 04 августа 2011

Прежде всего, держитесь подальше от Arraylist или Hashtable.Эти классы следует считать устаревшими в пользу генериков.Они все еще на языке для унаследованных целей.

Теперь, что вы ищете, это класс List<T>.Обратите внимание, что если T является типом значения, у вас будет непрерывная память, но нет, если T по ссылочным типам по очевидным причинам.

15 голосов
/ 04 августа 2011

использование List<T>. Внутренне он использует массивы, а массивы используют непрерывную память.

13 голосов
/ 04 августа 2011

C # имеет много типов ссылок.Даже если контейнер хранит ссылки непрерывно, сами объекты могут быть разбросаны по куче

4 голосов
/ 08 апреля 2014

Похоже, что CLR / C # скоро получит лучшую поддержку Vector <>.

http://blogs.msdn.com/b/dotnet/archive/2014/04/07/the-jit-finally-proposed-jit-and-simd-are-getting-married.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...