list là container sequence cho phép cấp phát bộ nhớ không liên tục (linked list). Duyệt chậm hơn vector nhưng chèn/xóa nhanh khi đã biết vị trí (O(1)).
Các hàm được sử dụng
- l.push_front(val) – Thêm vào đầu.
- l.push_back(val) – Thêm vào cuối.
- l.pop_front() – Xóa đầu.
- l.pop_back() – Xóa cuối.
- l.front() / l.back() – Truy cập đầu/cuối.
- l.size() – Số phần tử.
- l.resize(n[, val]) – Thay đổi kích thước.
- l.remove(val) – Xóa tất cả phần tử bằng val.
- l.unique() – Xóa các phần tử trùng lặp liền kề (cần sort trước).
- l.reverse() – Đảo ngược list.
Ví dụ mã: Menu List đầy đủ
#include <iostream>
#include <list>
#include <string>
#include <cstdlib>
using namespace std;
int main() {
list<int> l;
list<int>::iterator it;
int c, i;
while (true) {
cout << "1. Thêm đầu\n2. Thêm cuối\n3. Xóa đầu\n4. Xóa cuối\n";
cout << "5. Xem đầu\n6. Xem cuối\n7. Kích thước\n8. Resize\n";
cout << "9. Xóa theo giá trị\n10. Xóa trùng lặp liền kề\n";
cout << "11. Đảo ngược\n12. Hiển thị\n13. Thoát\n";
cout << "Chọn: "; cin >> c;
switch (c) {
case 1: cout << "Giá trị: "; cin >> i; l.push_front(i); break;
case 2: cout << "Giá trị: "; cin >> i; l.push_back(i); break;
case 3: if (!l.empty()) { i = l.front(); l.pop_front(); cout << i << " đã xóa\n"; } else cout << "Rỗng!\n"; break;
case 4: if (!l.empty()) { i = l.back(); l.pop_back(); cout << i << " đã xóa\n"; } else cout << "Rỗng!\n"; break;
case 5: if (!l.empty()) cout << "Đầu: " << l.front() << endl; else cout << "Rỗng!\n"; break;
case 6: if (!l.empty()) cout << "Cuối: " << l.back() << endl; else cout << "Rỗng!\n"; break;
case 7: cout << "Kích thước: " << l.size() << endl; break;
case 8: cout << "Kích thước mới: "; cin >> i; l.resize(i); break;
case 9: cout << "Giá trị xóa: "; cin >> i; l.remove(i); break;
case 10: l.unique(); cout << "Đã xóa trùng liền kề\n"; break;
case 11: l.reverse(); cout << "Đã đảo ngược\n"; break;
case 12: cout << "List: "; for (it = l.begin(); it != l.end(); ++it) cout << *it << " "; cout << endl; break;
case 13: return 0;
default: cout << "Sai!\n";
}
}
return 0;
}
Kết quả mẫu
Chọn: 1 Giá trị: 1 Chọn: 1 Giá trị: 2 Chọn: 3 2 đã xóa Chọn: 2 Giá trị: 5 Chọn: 1 Giá trị: 6 Chọn: 1 Giá trị: 7 Chọn: 12 List: 7 6 5 Chọn: 10 Đã xóa trùng liền kề Chọn: 11 Đã đảo ngược Chọn: 12 List: 5 6 7 Chọn: 13