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

  • Klemens Torggler

    Klemens Torg

    11 Mart 2008
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010
  • RiceBunny

    RiceBunny

    16 ŞUBAT 2006