Reputation: 25058
What's the C# equivalent of C++ vector?
I am searching for this feature:
To have a dynamic array of contiguously stored memory that has no performance penalty for access vs. standard arrays.
I was searching and they say .NET equivalent to the vector in C++ is the ArrayList
, so:
Do ArrayList have that contiguous memory feature?
Upvotes: 101
Views: 227889
Reputation: 7448
First of all, stay away from Arraylist
or Hashtable
. Those classes are to be considered deprecated, in favor of generics. They are still in the language for legacy purposes.
Now, what you are looking for is the List<T>
class. Note that if T is a value type you will have contiguos memory, but not if T is a reference type, for obvious reasons.
Upvotes: 18
Reputation: 133092
C# has a lot of reference types. Even if a container stores the references contiguously, the objects themselves may be scattered through the heap
Upvotes: 19
Reputation: 109007
use List<T>
. Internally it uses arrays and arrays do use contiguous memory.
Upvotes: 20
Reputation: 1039328
You could use a List<T>
and when T
is a value type it will be allocated in contiguous memory which would not be the case if T
is a reference type.
Example:
List<int> integers = new List<int>();
integers.Add(1);
integers.Add(4);
integers.Add(7);
int someElement = integers[1];
Upvotes: 120