프로그래밍 할 때 가장 자주 사용하는 자료구조가 바로 배열입니다. 배열을 사용하지 않고 프로그래밍 하기는 힘들죠^^.
그래서 이번에는 C++/CLI에서의 배열에 대해서 이야기하려고 합니다.
C++/CLI에서의 배열은 ‘array’
비관리 C++에서는 배열은 ‘[]’을 사용합니다.
int Nums[10];
char szName[20] = {0,};
그러나 C++/CLI에서의 배열은 ‘array’라는 클래스를 사용합니다.
int 형의 3개의 요소를 가지는 배열은 아래와 같이 정의합니다.
array< int >^ A1 = gcnew array< int >(3);
array< int >^ A2 = gcnew array< int >(4) { 1, 2, 3 };
array< int >^ A3 = gcnew array< int >{ 1, 2, 3 };
다음은 간단한 사용 예입니다.
< 코드 1. >
int main()
{
array< int >^ Numbers = gcnew array< int >(5);
for( int i = 0; i < 5; ++i )
{
Numbers[ i ] = i;
System::Console::WriteLine( Numbers[i] );
}
getchar();
return 0;
}
array에 유저 정의형 사용하기
array에는 기본형(int, float 등)만이 아닌 유저 정의형도 사용할 수 있습니다. 다만 비관리 클래스는 안됩니다. 오직 관리 클래스(ref class)만 가능합니다. 또 그냥 ref 클래스를 그대로 넣을 수는 없는 클래스의 핸들을 사용해야 합니다(ref 클래스는 GC에 동적 할당을 하기 때문이겠죠).
ref class refTest
{
};
array< refTest >^ arrTest; // 에러
array< refTest^ >^ arrTest; // OK
for each 사용하기
앞서 <코드1>의 예제에서는 배열의 모든 요소를 순환하기 하기 위해 ‘for’문을 사용했습니다. 그러나 .NET에서는 for문 보다 ‘for each’문을 사용하는 것이 성능이나 안정성 등에서 더 좋습니다(다만 for each를 사용하면 내부에서 값을 변경할 수 없다는 문제는 있습니다).
< 코드 2. >
#include <iostream>
int main()
{
array< int >^ Numbers = gcnew array< int > { 10, 11, 12, 13, 14 };
for each( int nValue in Numbers )
{
System::Console::WriteLine( nValue );
}
getchar();
return 0;
}
다 차원 배열
array는 너무 당연하게 다 차원 배열도 만들 수 있습니다.
< 코드 3. 2차원 배열의 예 >
int main()
{
array<int,2>^ a2 = gcnew array<int,2>(4,4);
array<int,2>^ b2 = gcnew array<int,2>{ {1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4} };
getchar();
return 0;
}
array의 기능은 .NET 라이브러리의 array 클래스를 사용하므로 자세한 사용방법은 MSDN에서 .NET 라이브러리 부분을 참고 하시가 바랍니다.
다음에는 nullptr, interior_ptr, pin_ptr 설명과 관리코드의 타입을 비관리 코드로 넘길 때 어떤 작업을 하는지 이야기 하겠습니다.^^
'C++/CLI' 카테고리의 다른 글
[Step. 05] 관리 코드의 array를 비관리 코드에 포인터로 전달 (0) | 2010.07.09 |
---|---|
[Step. 04] nullptr, interior_ptr, pin_ptr (2) | 2010.06.25 |
[Step.02-2] 클래스(class), 핸들(^), 그리고 구조체(struct) (5) | 2010.06.11 |
[Step 02-1] 클래스(class), 핸들(^), 그리고 구조체(struct) (1) | 2010.06.04 |
[Step 01] ‘C++/CLI가 뭐야?’에 답하기 && 가장 많은 프로그래밍 언어로 만드는 프로그램 만들기 (0) | 2010.05.28 |