데이터셋에 있는 요소를 열거할 때 비관리코드에서는 보통 for문이나 while문을 자주 사용합니다.
그러나 C++/CLI에서는 for
each을 사용하여 데이터셋에 있는 요소들을 열거할 수 있습니다.
for each에서 사용할 수 있는 것은 배열 이외에도 아래의 형으로 구현한 것들을 사용할 수 있습니다.
1. IEnumerable 인터페이스를 구현한 클래스
2. STL의 이터레이터와 같은 것을 가지고 있는 클래스
참고로 VC++ 8(VS 2005)에서는 비관리코드에서도 for each 문을 지원하고 있습니다.
또 for each를 사용할 때 주의해야 할 점은 열거하는 요소를 변경할 수는 없다는 것입니다.
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <map>
using namespace std;
using namespace System;
using namespace System::Collections;
int main(array<System::String ^> ^args)
{
// 배열
array< int >^ Nums = { 0, 1, 2, 3, 4, 5 };
for each(int value in Nums)
{
value = 2;
Console::WriteLine( value );
}
// 위에서 for each 내부에서 요소의 값을 바꾸었지만 아래의 출력 값을 보면
// 바뀌지 않은 것을 알 수 있습니다.
for each(int value in Nums)
{
Console::WriteLine( value );
}
// 리스트
ArrayList^ NumList = gcnew ArrayList();
NumList->Add(1);
NumList->Add(2);
NumList->Add(3);
for each(int value in NumList)
{
Console::WriteLine(value);
}
// vector
vector<int> vi;
vi.push_back(3);
vi.push_back(4);
for each(int i in vi)
{
Console::WriteLine(i);
}
// map
map<const char*, int> num;
num["ten"] = 10;
num["hundred"] = 100;
for each( pair<const char*, int> c in num )
{
Console::WriteLine(gcnew String(c.first) + c.second.ToString());
}
// 해쉬 테이블
Hashtable^ ht = gcnew Hashtable();
ht["aaa"] = "111";
ht["bbb"] = "222";
for each(DictionaryEntry^ dic in ht)
{
Console::WriteLine(dic->Key->ToString() + dic->Value->ToString());
}
getchar();
return 0;
}
'C++/CLI' 카테고리의 다른 글
[Step. 15] static 생성자, initonly, literal (1) | 2010.09.24 |
---|---|
[Step. 13] parameter array (1) | 2010.09.10 |
[Step. 11] 열거형( enum ) (2) | 2010.08.27 |
[Step. 10] 이벤트 ( event ) (0) | 2010.08.20 |
[Step. 09] 델리게이트 (delegate) (2) | 2010.08.12 |