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
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.

Bir std başlatmak için en kolay yolu n...
C konumuna göre değer yerine vektör öğ...
STL silme öğeleri yineleme sırasında s...
Nasıl öğeleri eklemek için PHP boş bir...
Nasıl çift çifti ikinci unsuru tabanlı...