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ÅŸ:

Python yineleme sırasında bir listeden...
Nasıl üzerinde yineleme sırasında gene...
Nasıl üzerinde yineleme sırasında bir ...
STL silme öğeleri yineleme sırasında s...
Liste görünümü getListİtemXmlAttribute...