Aracılığıyla paylaş


Tüm bir toplamanın üyeleri erişme

mfc dizi koleksiyon sınıfları — her iki şablon tabanlı ve değil — dizinler öğelerini erişmek için kullanın.mfc listesi ve harita koleksiyon sınıfları — iki şablon tabanlı ve — türünde bir gösterge kullanmak konumu koleksiyonu içindeki belirli bir pozisyonu tanımlamak için.Bu koleksiyonlar bir veya daha fazla üyesi erişmek için ilk başlatmak konum göstergesi sürekli koleksiyon o konuma geçmesi ve sonraki öğeye dönmek için isteyin.Koleksiyonu yineleme hakkında ilerleme durumu bilgilerini bakımından sorumlu değildir.Bu bilgiler, konum göstergesi tutulur.Ancak belirli bir konum verildiğinde, koleksiyon sonraki öğeyi döndürmek için sorumludur.

Aşağıdaki yordamlarda nasıl mfc ile sağlanan koleksiyon üç ana türü üzerinden yineleme göster:

  • Bir dizi yineleme

  • Yineleme listesi

  • Harita yineleme

Bir dizi yineleme yapmak için

  • Sıralı dizin numaralarıyla kullanmak GetAt üye işlevi:

    CTypedPtrArray<CObArray, CPerson*> myArray;
    
    myArray.Add(new CPerson());
    for (int i = 0; i < myArray.GetSize();i++)
    {
       CPerson* thePerson = myArray.GetAt(i);
       thePerson->AssertValid();
    }       
    

    Bu örnek için işaretçiler içeren yazılı bir işaretçi bir dizi kullanır CPerson nesneler.Array sınıfından türetilir CObArray, nontemplate birini öntanımlı sınıflar.GetAtbir işaretçi döndürür bir CPerson nesnesi.Yazılı işaretçi koleksiyon sınıfları için — diziler veya listeleri — temel sınıf; ilk parametre belirtir ikinci parametre depolama türünü belirtir.

    CTypedPtrArray Sınıfı da aşırı [] operatörü böylece her zamanki dizi indisi sözdizimi dizi öğelerinin erişim için kullanabilirsiniz.Alternatif gövdesi içinde deyim for yukarıdaki döngü

    CPerson* thePerson = myArray[i];
    

    Bu işleç ikisini de var const ve olmayan-const sürümleri.Const için çağrılan sürüm const diziler yalnızca sağ tarafında bir atama deyimi görüntülenebilir.

Liste yineleme yapmak için

  • Üye işlevlerini GetHeadPosition ve GetNext inin aracılığıyla listesi için:

    CTypedPtrList<CObList, CPerson*> myList;
    
    myList.AddHead(new CPerson());
    POSITION pos = myList.GetHeadPosition();
    while(pos != NULL)
    {
       CPerson* thePerson = myList.GetNext(pos);
       thePerson->AssertValid();
    }
    

    Bu örnek için işaretçiler içeren yazılı işaretçiyi liste kullanır CPerson nesneler.Yordamda dizi listesi beyanından benzer bir dizi yineleme yapmak için sınıfından türetilen ama CObList.GetNextbir işaretçi döndürür bir CPerson nesnesi.

Harita yineleme yapmak için

  • Kullanım GetStartPosition map başlangıcına almak için ve GetNextAssoc sürekli olarak bir sonraki anahtar ve değer eşlemesinden tarafından aşağıdaki örnekte gösterildiği gibi almak için:

    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
    }       
    

    Bu örnek, bir basit eşleme şablonu kullanır (yazılı işaretçi toplama yerine) kullanan CString anahtarları ve işaretçiler depolar CPerson nesneler.Gibi erişim işlevlerini kullandığınızda, GetNextAssoc, sınıf işaretçiler sağlar CPerson nesneler.Bunun yerine nontemplate harita koleksiyonları birini kullanmanız durumunda, döndürülen dönüştürmelisiniz CObject bir işaretçi işaretçi bir CPerson.

    [!NOT]

    Nontemplate haritalar için derleyici bir başvuru gerektirir bir CObject , son parametre işaretçisi GetNextAssoc.Giriş üzerinde bir sonraki örnekte gösterildiği gibi işaretçilerinizi o türe dönüştürmelisiniz.

    Şablon çözüm basittir ve daha iyi tür güvenliği sağlamaya yardımcı olur.Burada gördüğünüz gibi nontemplate daha karmaşık kodudur:

    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
    }
    

Daha fazla bilgi için bkz: CObject koleksiyonundaki tüm nesneleri silme.

Ayrıca bkz.

Kavramlar

Koleksiyonlar