Özellikle bir öğeyi silmek için kullanabileceğiniz iki yol vardır. bir vektör alalım
std :: vector < int > v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(40);
v.push_back(50);
1) Verimli olmayan yol: Oldukça etkili gibi görünse de, silme işlevi öğeleri sildiğinden ve tüm öğeleri 1 tarafından sola doğru kaydırdığı için değil,
bu yüzden karmaşıklığı O (n ^ 2) olacaktır.
std :: vector < int > :: iterator itr = v.begin();
int value = 40;
while ( itr != v.end() )
{
if(*itr == value)
{
v.erase(itr);
}
else
++itr;
}
2) Etkili bir yol (TAVSİYE) : ERASE - REMOVE deyimleri olarak da bilinir .
- std :: remove, verilen aralığı, kabın başlangıcına kaydırılan belirli bir öğeye eşit olmayan tüm öğelerle bir aralığa dönüştürür.
- Yani, eşleşen öğeleri kaldırmayın. Sadece eşleşmemiş olanı başlangıca kaydırdı ve yeni geçerli sona bir yineleyici verdi. Sadece O (n) karmaşıklığı gerektirir.
kaldırma algoritmasının çıktısı:
10 20 30 50 40 50
çünkü kaldırma türünün kaldırılması bu aralığın yeni sonuna yineleyicidir.
template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);
Şimdi öğeleri yeni uçtan vektörün eski ucuna silmek için vektörün silme işlevini kullanın. O (1) zamanı gerektirir.
v.erase ( std :: remove (v.begin() , v.end() , element ) , v.end () );
yani bu yöntem O (n)