Ada dua cara yang dapat Anda gunakan untuk menghapus item khususnya. mari kita ambil vektor
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) Cara tidak efisien: Meskipun tampaknya cukup efisien tetapi itu bukan karena fungsi hapus menghapus elemen dan menggeser semua elemen ke kiri oleh 1.
sehingga kompleksitasnya adalah O (n ^ 2)
std :: vector < int > :: iterator itr = v.begin();
int value = 40;
while ( itr != v.end() )
{
if(*itr == value)
{
v.erase(itr);
}
else
++itr;
}
2) Cara efisien (DISARANKAN) : Ini juga dikenal sebagai idiom - HAPUS .
- std :: remove mengubah rentang yang diberikan menjadi rentang dengan semua elemen yang membandingkan tidak sama dengan elemen yang diberikan bergeser ke awal wadah.
- Jadi, sebenarnya jangan hapus elemen yang cocok. Itu hanya menggeser yang tidak cocok untuk memulai dan memberikan iterator ke akhir yang valid baru. Itu hanya membutuhkan O (n) kompleksitas.
output dari algoritma hapus adalah:
10 20 30 50 40 50
sebagai jenis pengembalian hapus adalah iterator ke ujung baru dari rentang itu.
template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);
Sekarang gunakan fungsi hapus vektor untuk menghapus elemen dari ujung baru ke ujung lama vektor. Membutuhkan O (1) waktu.
v.erase ( std :: remove (v.begin() , v.end() , element ) , v.end () );
jadi metode ini bekerja di O (n)