web-dev-qa-db-fra.com

Équivalent C # du vecteur C ++, avec mémoire contiguë?

Quel est l'équivalent C # du vecteur C++?

Je recherche cette fonctionnalité:

Avoir un tableau dynamique de mémoire stockée de manière contiguë qui ne nuit en rien aux performances par rapport aux tableaux standard.

Je cherchais et ils disent .NET equivalent to the vector in C++ is the ArrayList, alors:

ArrayList a-t-il cette fonctionnalité de mémoire contiguë?

73
cMinor

Vous pouvez utiliser un List<T> et lorsque T est un type de valeur, il sera alloué en mémoire contiguë, ce qui ne serait pas le cas si T était un type de référence.

Exemple:

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

int someElement = integers[1];
89
Darin Dimitrov

utilisation List<T> . En interne, il utilise des tableaux et les tableaux utilisent une mémoire contiguë.

16
Bala R

Tout d’abord, éloignez-vous de Arraylist ou Hashtable. Ces classes doivent être considérées comme obsolètes au profit des génériques. Ils sont toujours dans la langue pour les besoins de l'héritage.

Maintenant, ce que vous recherchez est le List<T> classe. Notez que si T est un type de valeur, vous aurez une mémoire contiguë, mais pas si T est un type de référence, pour des raisons évidentes.

16
Matteo Mosca

C # a beaucoup de types de référence. Même si un conteneur stocke les références de manière contiguë, les objets eux-mêmes peuvent être dispersés dans le tas.

13
Armen Tsirunyan
4
rjdevereux