Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ triển khai List trong STL

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