C# equivalente ao vector C++, com memória contígua?

Qual é o equivalente C# do vector c++?

Estou à procura deste recurso:

ter uma matriz dinâmica de memória contiguosamente armazenada que não tem nenhuma penalidade de desempenho para o acesso vs. arrays padrão.

eu estava à procura e eles disseram .NET equivalent to the vector in C++ is the ArrayList, então:

O ArrayList tem aquela característica de memória contígua?

 61
Author: Bo Persson, 2011-08-04

5 answers

Você pode usar um List<T> e quando T é um tipo de valor que será alocado na memória contígua, o que não seria o caso de se T é um tipo de referência.

Exemplo:

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

int someElement = integers[1];
 72
Author: Darin Dimitrov, 2011-08-04 14:31:09

Utilizar List<T>. Internamente ele usa arrays e arrays usam memória contígua.

 14
Author: Bala R, 2011-08-04 14:31:24

O C# tem muitos tipos de referência. Mesmo que um recipiente armazena Referências contiguosamente, os objetos em si podem ser espalhados através do Monte

 12
Author: Armen Tsirunyan, 2011-08-04 14:32:04
Em primeiro lugar, Afasta-te de Arraylist ou Hashtable. Essas classes devem ser consideradas depreciadas, a favor dos genéricos. Eles ainda estão na língua para fins de legado. Agora, o que você está procurando é a classe List<T>. Note que se T é um tipo de valor você terá memória contiguos, mas não se T é um tipo de referência, por razões óbvias.
 12
Author: Matteo Mosca, 2011-08-04 14:32:23

Parece que a CLR / c# pode estar a obter um melhor suporte para o Vector em breve.

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

 4
Author: rjdevereux, 2014-04-08 13:18:57