Trang tài liệu
Khóa học C++ nền tảng
Chương 11. Thư viện mẫu chuẩn (STL)
Thuật toán STL

Thuật toán STL

Thư viện mẫu chuẩn (STL) trong C++ cung cấp một tập hợp các thuật toán chung được thiết kế để hoạt động với các lớp vùng chứa khác nhau. Các thuật toán này được triển khai dưới dạng các hàm và có thể được áp dụng cho các cấu trúc dữ liệu khác nhau, chẳng hạn như mảng, vectơ, danh sách và các cấu trúc khác. File header chính cho thuật toán là .

Nội dung khóa

Sắp xếp

Sắp xếp (sorting) đề cập đến việc sắp xếp một chuỗi các phần tử theo một thứ tự cụ thể. STL cung cấp một số thuật toán sắp xếp, chẳng hạn như std::sort, std::stable_sort, và std::partial_sort.

std::sort

std::sort được sử dụng để sắp xếp một loạt các phần tử [đầu tiên, cuối cùng) theo thứ tự tăng dần (theo mặc định). Bạn cũng có thể sử dụng các hàm so sánh tùy chỉnh hoặc biểu thức lambda để thay đổi thứ tự sắp xếp.

Ví dụ:

#include <algorithm>
#include <vector>
#include <iostream>
 
int main() {
    std::vector<int> nums = {10, 9, 8, 7, 6, 5};
    std::sort(nums.begin(), nums.end());
 
    for (int num : nums) {
        std::cout << num << ' ';
    }
    // Đầu ra: 5 6 7 8 9 10
}

Tìm kiếm

Tìm kiếm (searching) đề cập đến việc tìm xem liệu một phần tử cụ thể có xuất hiện trong một phạm vi phần tử nhất định hay không. STL cung cấp các thuật toán tìm kiếm khác nhau, chẳng hạn như std::find, std::binary_search, và std::find_if.

std::find

std::find được sử dụng để tìm biến lặp của lần xuất hiện đầu tiên của một giá trị nhất định trong phạm vi [đầu tiên, cuối cùng).

Ví dụ:

#include <algorithm>
#include <vector>
#include <iostream>
 
int main() {
    std::vector<int> nums = {5, 6, 7, 8, 9, 10};
    auto it = std::find(nums.begin(), nums.end(), 9);
 
    if (it != nums.end()) {
        std::cout << "Found 9 at position: " << (it - nums.begin());
    } else {
        std::cout << "9 not found";
    }
    // Đầu ra: Found 9 at position: 4
}

Sửa đổi trình tự

STL cũng cung cấp các thuật toán để sửa đổi trình tự, chẳng hạn như std::remove, std::replace và std::unique.

std::remove

std::remove được sử dụng để xóa tất cả các trường hợp của một giá trị khỏi vùng chứa trong phạm vi đã cho [đầu tiên, cuối cùng). Lưu ý rằng hàm không thay đổi kích thước vùng lưu trữ sau khi loại bỏ các phần tử.

Ví dụ:

#include <algorithm>
#include <vector>
#include <iostream>
 
int main() {
    std::vector<int> nums = {5, 6, 7, 6, 8, 6, 9, 6, 10};
    nums.erase(std::remove(nums.begin(), nums.end(), 6), nums.end());
 
    for (int num : nums) {
        std::cout << num << ' ';
    }
    // Đầu ra: 5 7 8 9 10
}

Tổng kết

Thuật toán STL trong C++ cung cấp một tập hợp các hàm hữu ích cho các thao tác chính như sắp xếp, tìm kiếm và sửa đổi trình tự. Các thuật toán có thể được sử dụng với nhiều lớp vùng lưu trữ khác nhau, làm cho chúng rất linh hoạt và là một phần thiết yếu của lập trình C++.