ฟังก์ชัน list::erase() ใน C++ STL
list::erase() คืออะไร?
ลบองค์ประกอบจาก list container ได้ทั้งตัวเดียว (by iterator) หรือช่วง (range of iterators) ลดขนาด container ตามจำนวนที่ลบ
Syntax
list_container.erase(position); list_container.erase(start_position, end_position);
พารามิเตอร์
position- iterator ชี้ไปองค์ประกอบที่ต้องการลบstart_position, end_position- ช่วง[first, last)ที่ต้องการลบ
คืนค่า
Iterator ชี้ไปองค์ประกอบถัดจากตัวสุดท้ายที่ถูกลบ (หรือ end() ถ้าลบจนหมด)
ตัวอย่าง 1: ลบองค์ประกอบเดียว (ตัวแรก)
#include <bits/stdc++.h>
using namespace std;
int main() {
list<int> myList = {2, 4, 6, 8, 10};
cout << "List before deleting elements: ";
for (auto i = myList.begin(); i != myList.end(); i++) cout << *i << " ";
auto it = myList.begin(); // iterator ชี้ตัวแรก
myList.erase(it); // ลบ 2
cout << "\nList after deleting elements: ";
for (auto i = myList.begin(); i != myList.end(); i++) cout << *i << " ";
return 0;
}
Output: List before: 2 4 6 8 10 → after: 4 6 8 10
ตัวอย่าง 2: ลบช่วง (Range Erase)
#include <bits/stdc++.h>
using namespace std;
int main() {
list<int> myList = {2, 4, 6, 8, 10};
cout << "List before deleting elements: ";
for (auto i = myList.begin(); i != myList.end(); i++) cout << *i << " ";
auto it1 = myList.begin();
auto it2 = myList.begin();
advance(it2, 4); // ขยับ it2 ไป 4 ตำแหน่ง (ชี้ 10)
myList.erase(it1, it2); // ลบ [it1, it2) คือ 2,4,6,8
cout << "\nList after deleting elements: ";
for (auto i = myList.begin(); i != myList.end(); i++) cout << *i << " ";
return 0;
}
Output: List before: 2 4 6 8 10 → after: 10
ข้อสังเกต
- Invalidates เฉพาะ iterator ขององค์ประกอบที่ถูกลบ (iterator อื่นคงอยู่)
- ใช้
std::advanceย้าย iterator (list ไม่มี random access) - Complexity: O(1) สำหรับ single erase, O(k) สำหรับ range erase (k = จำนวนที่ลบ)