다음을 통해 공유


컬렉션의 모든 멤버에 액세스

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 배열, 대입문의 오른쪽에만 나타날 수 있습니다.

목록을 반복 하려면

  • 멤버 함수 사용 GetHeadPositionGetNext 목록을 통해 원하는 방식으로 작동 합니다:

    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 컬렉션의 모든 개체 삭제.

참고 항목

개념

컬렉션