Bir vektör öğeleri silme | Netgez.com
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

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • STITCHLESS TV how to sew your own style tutorials

    STITCHLESS T

    9 HAZİRAN 2011
  • The Amazing Atheist

    The Amazing

    20 Kasım 2006