컬렉션의 모든 멤버에 액세스
MFC 배열 컬렉션 클래스-모두 템플릿 기반 및 않습니다-인덱스를 사용 하 여 해당 요소에 액세스할 수.MFC 목록 및 맵 컬렉션 클래스-모두 템플릿 기반 및 않습니다-형식의 표시기를 사용 하 여 위치 컬렉션 내의 지정 된 위치에 설명 합니다.하나 이상의 이러한 컬렉션 구성원에 액세스 하려면 하면 먼저 위치 표시기를 초기화 반복적으로 컬렉션에 해당 위치를 통과 하 다음 요소를 반환 하도록 요청 합니다.컬렉션 반복의 진행 상황에 대 한 상태 정보를 유지 관리에 대 한 책임을 지지 않습니다.해당 정보는 위치 표시기에 보관 됩니다.그러나 특정 위치가 지정 된 경우 컬렉션의 다음 요소를 반환 하는 담당 합니다.
다음 절차는 주 세 가지 MFC에서 제공 하는 컬렉션을 반복 하는 방법을 보여 줍니다.
배열 반복
목록을 반복합니다.
지도 반복합니다.
배열을 반복 하려면
순차 인덱스 번호를 사용 하 여 GetAt 멤버 함수:
CTypedPtrArray<CObArray, CPerson*> myArray; myArray.Add(new CPerson()); for (int i = 0; i < myArray.GetSize();i++) { CPerson* thePerson = myArray.GetAt(i); thePerson->AssertValid(); }
이 예제에서는 포인터를 포함 하는 형식화 된 포인터 배열 사용 CPerson 개체입니다.배열 클래스에서 파생 된 CObArray, 하나는 비템플릿 기반 클래스를 미리 정의 합니다.GetAt에 대 한 포인터를 반환 된 CPerson 개체입니다.형식화 된 포인터 컬렉션 클래스에 대 한-배열 또는 목록-첫 번째 매개 변수 기본 클래스를 지정 합니다. 두 번째 매개 변수를 저장할 형식을 지정 합니다.
CTypedPtrArray 클래스는 오버 로드는 연산자 관습 배열의 요소에 액세스 하려면 배열 첨자가 구문을 사용할 수 있도록 합니다.대신 본문 문에 for 위의 루프
CPerson* thePerson = myArray[i];
이 연산자는 모두에서 존재 const 및 비-const 버전입니다.Const 를 호출 하는 버전 const 배열, 대입문의 오른쪽에만 나타날 수 있습니다.
목록을 반복 하려면
멤버 함수 사용 GetHeadPosition 및 GetNext 목록을 통해 원하는 방식으로 작동 합니다:
CTypedPtrList<CObList, CPerson*> myList; myList.AddHead(new CPerson()); POSITION pos = myList.GetHeadPosition(); while(pos != NULL) { CPerson* thePerson = myList.GetNext(pos); thePerson->AssertValid(); }
형식화 된 포인터 목록에 대 한 포인터를 포함 하도록 예제 CPerson 개체입니다.목록 선언을 프로시저에서 배열에 대 한 비슷한 배열을 반복 하려면 클래스에서 파생 되지만 CObList.GetNext에 대 한 포인터를 반환 된 CPerson 개체입니다.
지도 반복 합니다.
사용 GetStartPosition 지도 맨 앞으로 가져오려면 및 GetNextAssoc 반복적으로 다음 키 및 값에서 지도, 다음 예제에서와 같이 가져올 수:
CMap<CString, LPCTSTR, CPerson*, CPerson*> myMap; CPerson myPerson; myMap.SetAt(_T("Bill"), &myPerson); POSITION pos = myMap.GetStartPosition(); while(pos != NULL) { CPerson* pPerson; CString string; // Get key (string) and value (pPerson) myMap.GetNextAssoc(pos, string, pPerson); // Use string and pPerson }
이 예제에서는 단순 맵 템플릿 사용 (대신 형식화 된 포인터 컬렉션)를 사용 하 여 CString 키에 대 한 포인터를 저장 하 고 CPerson 개체.같은 access 함수를 사용할 때 GetNextAssoc, 클래스에 대 한 포인터를 제공 합니다. CPerson 개체입니다.맵 비템플릿 기반 컬렉션 중 하나를 대신 사용 하는 경우 반환 되는 캐스팅 해야 CObject 에 대 한 포인터를 포인터를 CPerson.
[!참고]
비템플릿 기반 지도 대 한 컴파일러에 대 한 참조를 필요는 CObject 는 마지막 매개 변수에 대 한 포인터 GetNextAssoc.입력에는 다음 예제와 같이를 해당 형식으로 포인터를 캐스팅 해야 합니다.
템플릿 솔루션 간단 하 고 더 나은 형식 안전성을 제공할 수 있습니다.여기서 볼 수 있듯이 비템플릿 기반 코드를 좀 더 복잡 한입니다.
CMapStringToOb myMap; // A nontemplate collection class CPerson myPerson; myMap.SetAt(_T("Bill"), &myPerson); POSITION pos = myMap.GetStartPosition(); while(pos != NULL) { CPerson* pPerson; CString string; // Gets key (string) and value (pPerson) myMap.GetNextAssoc(pos, string, (CObject*&)pPerson); ASSERT(pPerson->IsKindOf( RUNTIME_CLASS(CPerson))); // Use string and pPerson }
자세한 내용은 CObject 컬렉션의 모든 개체 삭제.