SORU
22 Kasım 2011, Salı


Nasıl bu yineleme sırasında bir haritadan kaldırmak için?

Nasıl bu yineleme sırasında bir haritadan silerim? gibi:

std::map<K, V> map;
for(auto i : map)
    if(needs_removing(i))
        // remove it from the map

map.erase kullanırsam bu kullanımına geçersiz kılar

CEVAP
22 Kasım 2011, Salı


Standart ilişkisel-konteyner deyim silme:

for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */)
{
  if (must_delete)
  {
    m.erase(it  );
  }
  else
  {
      it;
  }
}

Biz gerçekten konteynırın değiştirme olduğumuz için burada for sıradan bir döngü istiyorum, unutmayın. Aralığı tabanlı bir döngü kesinlikle biz sadece elementler hakkında bakım durumlar için ayrılmış olmalıdır. Bu RBFL sözdizimi bile döngü gövdesi içinde konteyner teşhir ederek bunu açıkça ortaya koyuyor.

Edit.Pre-C silebilirsin değil 11, sabit-yineleyicisi. Orada söylemek zorunda:

for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }

Bir kapsayıcı öğe silme öğesi constness ile oran değildir. Benzetme, her zaman p pointer-to-sabit bir yerde delete p tamamen yasal oldu. Başka bir deyişle henüz, yıkıcı her zaman örtülü olarak 10**.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Central

    Android Cent

    13 Kasım 2008
  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • уσ ρℓz sυв ιℓℓ sυв вαcқ

    уσ ρℓz

    14 EKİM 2010