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

  • Incredible Tutorials

    Incredible T

    27 EKİM 2006
  • RealPapaPit

    RealPapaPit

    16 Mart 2009
  • wafflepwn

    wafflepwn

    14 AĞUSTOS 2008