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:
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];
Utilizar List<T>
. Internamente ele usa arrays e arrays usam memória contígua.
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
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.
Parece que a CLR / c# pode estar a obter um melhor suporte para o Vector em breve.