SORU
7 Aralık 2008, Pazar


Bir vektör öğeleri silme

Bir vektör sil yöntemini kullanarak bir öğe kaldırmak istiyorum. Ama sorun burada öğesi yalnızca bir kez vektör gerçekleşmesi garanti değildir. Mevcut birden çok kez olabilir ve hepsini temizlemek lazım. Benim kod böyle bir şey

void erase(std::vector<int>& myNumbers_in, int number_in)
{
    std::vector<int>::iterator iter = myNumbers_in.begin();
    std::vector<int>::iterator endIter = myNumbers_in.end();
    for(; iter != endIter;   iter)
    {
        if(*iter == number_in)
        {
            myNumbers_in.erase(iter);
        }
    }
}

int main(int argc, char* argv[])
{
    std::vector<int> myNmbers;
    for(int i = 0; i < 2;   i)
    {
        myNmbers.push_back(i);
        myNmbers.push_back(i);
    }

    erase(myNmbers, 1);

    return 0;
}

Bu kod yineleme sırasında vektör sonuna değiştiriyorum çünkü belli ki çöker. Bunu başarmak için en iyi yolu nedir? I. e. vektör ile birden çok kez yinelenmesi veya vektör bir kopyasını oluşturmadan bunu yapmak için herhangi bir yolu var mı?

CEVAP
7 Aralık 2008, Pazar


Kullanım remove/erase idiom:

std::vector<int>& vec = myNumbers; // use shorter name
vec.erase(std::remove(vec.begin(), vec.end(), number_in), vec.end());

Ne olur o remove kompakt öğeleri farklı değeri için alınması (number_in) başına vector döner yineleyici ilk öğe sonra bu değişir. erase bu unsurlar (değeri belirtilmemiş) kaldırır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fouseyTUBE

    fouseyTUBE

    21 Mart 2011
  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • How To Cook That

    How To Cook

    16 NİSAN 2011