SORU
27 ŞUBAT 2009, Cuma


Bir std öğeleri kaldırın::bu yineleme sırasında liste?

Şuna benzer bir kod var:

for (std::list<item*>::iterator i=items.begin();i!=items.end();i  )
{
    bool isActive = (*i)->update();
    //if (!isActive) 
    //  items.remove(*i); 
    //else
       other_code_involving(*i);
}
items.remove_if(CheckItemNotActive);

Gibi etkin olmayan öğeler hemen güncelleme listeyi yeniden yürümeye önlemek için O'na sonra kaldırmak istiyorum. Ama eğer açıklamalı-satır eklersem, i " dediğimde bir hata alıyorum: "Liste yineleyici değil incrementable". Açıklama için artış olmadı bazı alternatifler denedim, ama hiçbir şey işe alamadım.

Bir std yürüyor gibi öğeleri kaldırmak için en iyi yolu nedir::liste?

CEVAP
27 ŞUBAT 2009, Cuma


Yineleyici ilk artış var (ben ) ve bir önceki öğenin (örneğin, döndürülen değeri kullanarak çıkarın. Öyle gibi: bir süre döngü için bu kodu değiştirebilirsiniz

std::list<item*>::iterator i = items.begin();
while (i != items.end())
{
    bool isActive = (*i)->update();
    if (!isActive)
    {
        items.erase(i  );  // alternatively, i = items.erase(i);
    }
    else
    {
        other_code_involving(*i);
          i;
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • krotoflik

    krotoflik

    26 ŞUBAT 2011
  • The Computer Chronicles

    The Computer

    7 Kasım 2012
  • TROPFEST

    TROPFEST

    27 Mart 2007