С# эквивалент С++-вектора с непрерывной памятью?
Что такое эквивалент С# для вектора С++?
Я ищу эту функцию:
Чтобы иметь динамический массив смежно хранимой памяти, которая не имеет производительности для доступа к стандартным массивам.
Я искал и сказал .NET equivalent to the vector in C++ is the ArrayList
, поэтому:
У ArrayList есть эта непрерывная функция памяти?
Ответы
Ответ 1
Вы можете использовать List<T>
, а когда T
- тип значения, он будет выделен в непрерывной памяти, которая не была бы если T
является ссылочным типом.
Пример:
List<int> integers = new List<int>();
integers.Add(1);
integers.Add(4);
integers.Add(7);
int someElement = integers[1];
Ответ 2
используйте List<T>
. Внутри он использует массивы, а массивы используют непрерывную память.
Ответ 3
С# имеет много ссылочных типов. Даже если контейнер хранит ссылки смежно, сами объекты могут быть разбросаны через кучу
Ответ 4
Прежде всего, держитесь подальше от Arraylist
или Hashtable
. Эти классы следует считать устаревшими в пользу дженериков. Они все еще находятся в языке для устаревших целей.
Теперь вы ищете класс List<T>
. Обратите внимание: если T является типом значения, вы будете иметь память contiguos, но не если T является ссылочным типом по понятным причинам.
Ответ 5
Похоже, что CLR/С# может получить лучшую поддержку Vector < > soon.
http://blogs.msdn.com/b/dotnet/archive/2014/04/07/the-jit-finally-proposed-jit-and-simd-are-getting-married.aspx