2011-08-04 2 views
57

C++ 벡터와 동일한 C#은 무엇입니까?연속적인 메모리가있는 C++ 벡터에 해당하는?

나는이 기능을 찾고 있어요 :

표준 배열 대 액세스 성능 저하가없는 연속 저장 메모리의 동적 배열을 가지고.

그래서, 내가 검색 한 그들은 .NET equivalent to the vector in C++ is the ArrayList 말 :

마 ArrayList에 그 연속 메모리 기능이?

+4

당신이 (심지어 지속적으로 기대 나) 구조가 메모리에 할당하는 방법을 지정하기 위해 금속에 충분히 가까이 CLR 아닌가? – Aphex

답변

68

List<T>을 사용할 수 있으며 T이 값 유형 인 경우 T이 참조 유형 인 경우 연속되지 않는 메모리가 할당됩니다.

예 :

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

int someElement = integers[1]; 
+1

몇 가지 예를들시겠습니까? – cMinor

+2

@cMinor,'List '클래스의 문서에는 많은 예제가 포함되어 있지만이를 포함하도록 답변을 업데이트했습니다. –

+4

저는 CLR에 100 % 익숙하지는 않습니다 만,'T'가 레퍼런스 타입이라하더라도 연속적인 메모리를 가질 수 있다는 것은 의미가 있습니다. 기본적으로 포인터 배열입니다 ... – josaphatv

14

사용 List<T>. 내부적으로 배열을 사용하고 배열은 인접한 메모리를 사용합니다.

+6

+1. 왜 사람들은'ArrayList'에 대해서도 언급하고 있습니까? –

+1

사실 전적으로 사실입니다. T가 참조 유형이면 연속 메모리가 없습니다. –

+2

@Matteo 소스를 보면 백엔드 저장소, 참조 유형에 사용되는'private T [] _items;가 있습니다. –

12

C#에는 많은 참조 유형이 있습니다. 심지어 참조가 인접, 객체 자체가 힙 모든

12

먼저 흩어져 수있는 용기를 저장하는 경우, Arraylist 또는 Hashtable 멀리. 이러한 클래스는 제네릭을 위해 비추천으로 간주해야합니다. 그들은 여전히 ​​유산 목적을위한 언어로되어 있습니다.

자, 찾고있는 것은 List<T> 클래스입니다. T가 값 유형이면 contiguos 메모리를 갖지만 T가 참조 유형 인 경우가 아니라는 점에 유의해야합니다.