Ứng dụng STL và Lập trình Tổng Quát trong C++

Ngôn ngữ lập trình C++ hỗ trợ lập trình đa mô hình, bao gồm cả lập trình tổng quát. Lập trình tổng quát có thể được chia nhỏ thành các phương pháp tổng quát và lớp tổng quát. Thư viện Tiêu chuẩn C++ (STL) là một ví dụ điển hình về ứng dụng lập trình tổng quát. Nguyên lý hoạt động của lập trình tổng quát trong C++ là truyền loại dữ liệu thực tế vào thời điểm gọi hàm. So với Java, việc sử dụng lập trình tổng quát trong C++ có vẻ không trực quan và đôi khi phức tạp hơn do cách định nghĩa tên kiểu.

<!-- Một ví dụ cơ bản về hàm max tổng quát -->
<script type="text/cpp">
template <typename Loai> 
Loai timMax(Loai x, Loai y){
    if(x > y){
        return x;
    } else {
        return y;
    }
}
// Lưu ý rằng mặc dù Loại có thể là bất kỳ kiểu nào, nhưng nó phải hỗ trợ phép so sánh >
</script>

Một khái niệm quan trọng khác trong STL là iterator, dùng để duyệt qua các phần tử trong container. Con trỏ mảng chính là một ví dụ cổ điển của iterator.

<!-- Ví dụ về một iterator tổng quát -->
<script type="text/cpp">
template <typename Kieu>
struct doiTuongIterator {
    doiTuongIterator(danhSachKhoi<Kieu> *phanTu):phanTu(phanTu){}
    
    Kieu& layGiaTri(){
        cout << "Đã sử dụng tham chiếu tới giá trị" << endl;
        return phanTu->giaTri;
    }

    const Kieu& layGiaTri() const{
        cout << "Đã sử dụng tham chiếu hằng số tới giá trị" << endl;
        return phanTu->giaTri;
    }

    doiTuongIterator<Kieu>& operator++(int){
        phanTu = phanTu->tiepTheo;
        return *this;
    }

    bool operator!=(const doiTuongIterator<Kieu> khac) const{
        return phanTu != khac.phanTu;
    }

    danhSachKhoi<Kieu>* phanTu;
};
</script>

Các container như vector, list, set, map trong C++ có chức năng tương tự như các container trong Java, nhưng Java cung cấp giao diện thống nhất hơn và nhiều phương thức hơn, cùng với các lớp tiện ích. Ngược lại, C++ đơn giản hơn nhưng vẫn mạnh mẽ nhờ khả năng sử dụng kiểu dữ liệu cơ bản làm tham số tổng quát. Dưới đây là một số đoạn mã tiêu biểu từ STL của C++:

<!-- Các ví dụ sử dụng STL trong C++ -->
<script type="text/cpp">
int ds[] = {2, 32, 32, 90};
vector<int> vt(ds, ds + 4); // Chuyển đổi mảng sang vector
set<int> tapHop(vt.begin(), vt.end()); // Chuyển đổi vector sang set
bool ketQua = tapHop.insert(giaTri).second; // Trả về kết quả thêm mới
map<int, int> bangDem; // Sử dụng để đếm số lần xuất hiện của số nguyên
bangDem[so] += 1;
</script>

Thẻ: C++ STL lập_trình_tổng_quát

Đăng vào ngày 12 tháng 6 lúc 18:09