Menghapus Elemen dari Vektor C++ Saat Beriterasi
Dalam pemrograman C++, menghapus elemen dari vektor saat beriterasi memerlukan kehati-hatian. Jika Anda menghapus elemen secara langsung saat beriterasi menggunakan iterasi biasa (for
), Anda dapat mengalami perilaku yang tidak terdefinisi. Ini karena penghapusan elemen akan mengubah posisi elemen lainnya dalam vektor, dan iterasi Anda mungkin menjadi salah arah.
Berikut adalah beberapa pendekatan yang aman untuk menghapus elemen dari vektor C++ saat beriterasi:
1. Menggunakan Iterator Balik (Reverse Iterator)
- Anda dapat beriterasi melalui vektor dari belakang ke depan menggunakan iterator balik (
rbegin()
danrend()
). - Dengan cara ini, penghapusan elemen tidak akan mempengaruhi posisi elemen yang Anda iterasi.
#include
#include
using namespace std;
int main() {
vector numbers = {1, 2, 3, 4, 5};
// Hapus semua angka genap
for (auto it = numbers.rbegin(); it != numbers.rend(); ++it) {
if (*it % 2 == 0) {
numbers.erase(it.base()); // Gunakan 'base()' untuk mendapatkan iterator biasa
}
}
// Cetak vektor yang sudah diubah
for (int number : numbers) {
cout << number << " ";
}
cout << endl;
return 0;
}
2. Menggunakan Iterator dan erase()
- Anda dapat menggunakan iterator
erase()
untuk menghapus elemen saat beriterasi secara normal. - Pastikan untuk menginisialisasi ulang iterator setelah memanggil
erase()
, karena posisi iterator akan berubah.
#include
#include
using namespace std;
int main() {
vector numbers = {1, 2, 3, 4, 5};
// Hapus semua angka genap
for (auto it = numbers.begin(); it != numbers.end(); ) {
if (*it % 2 == 0) {
it = numbers.erase(it); // Inisialisasi ulang 'it' setelah penghapusan
} else {
++it;
}
}
// Cetak vektor yang sudah diubah
for (int number : numbers) {
cout << number << " ";
}
cout << endl;
return 0;
}
3. Menggunakan remove_if()
dan erase()
- Gunakan
remove_if()
untuk memindahkan semua elemen yang memenuhi kriteria penghapusan ke akhir vektor. - Kemudian, gunakan
erase()
untuk menghapus semua elemen dari akhir vektor sampai elemen pertama yang tidak memenuhi kriteria.
#include
#include
#include
using namespace std;
int main() {
vector numbers = {1, 2, 3, 4, 5};
// Hapus semua angka genap
numbers.erase(remove_if(numbers.begin(), numbers.end(), { return num % 2 == 0; }), numbers.end());
// Cetak vektor yang sudah diubah
for (int number : numbers) {
cout << number << " ";
}
cout << endl;
return 0;
}
Kesimpulan
Menghapus elemen dari vektor C++ saat beriterasi dapat dilakukan dengan aman menggunakan beberapa metode. Pilih metode yang paling sesuai dengan kebutuhan Anda dan perhatikan agar iterator selalu diperbarui dengan benar setelah menghapus elemen.