Algorithms
Thuật toán (Algorithms) trong ngôn ngữ C/C++ là các quy trình hoặc tập hợp các bước được thiết kế để giải quyết một bài toán cụ thể. Chúng được xây dựng nhằm tối ưu hóa hiệu suất, tận dụng khả năng xử lý mạnh mẽ của C/C++, và áp dụng trong nhiều lĩnh vực như xử lý dữ liệu, lập trình hệ thống, và trí tuệ nhân tạo.
Nhờ tính linh hoạt và hiệu quả cao, C/C++ trở thành lựa chọn phổ biến để triển khai các thuật toán từ cơ bản như sắp xếp, tìm kiếm, đến nâng cao như đồ thị và tối ưu hóa.
Các thao tác không làm thay đổi chuỗi
all_of | Kiểm tra xem liệu tất cả các phần tử trong một phạm vi có thỏa mãn một điều kiện cụ thể hay không |
any_of | Kiểm tra xem liệu có ít nhất một phần tử trong một phạm vi thỏa mãn một điều kiện cụ thể hay không |
none_of | Kiểm tra xem liệu không có phần tử nào trong một phạm vi thỏa mãn một điều kiện cụ thể hay không |
for_each | Áp dụng một hàm (hoặc đối tượng hàm) cho mỗi phần tử trong một phạm vi được chỉ định |
find | Tìm kiếm phần tử đầu tiên trong một phạm vi có giá trị bằng với một giá trị cho trước |
find_if | Tìm kiếm phần tử đầu tiên trong một phạm vi thỏa mãn một điều kiện cụ thể được xác định bởi một hàm vị từ |
find_if_not | Tìm kiếm phần tử đầu tiên trong một phạm vi không thỏa mãn một điều kiện cụ thể được xác định bởi một hàm vị từ |
find_end | Tìm kiếm sự xuất hiện cuối cùng của một dãy con trong một phạm vi khác |
find_first_of | Tìm kiếm phần tử đầu tiên trong một phạm vi mà phần tử đó khớp với bất kỳ phần tử nào trong một phạm vi khác |
adjacent_find | Tìm kiếm cặp phần tử liên tiếp đầu tiên trong một phạm vi mà hai phần tử đó thỏa mãn một điều kiện nhất định |
count | Đếm số lần xuất hiện của một giá trị cụ thể trong một phạm vi được chỉ định |
count_if | Đếm số lượng phần tử trong một phạm vi thỏa mãn một điều kiện cụ thể được xác định bởi một hàm vị từ |
mismatch | So sánh hai phạm vi và tìm vị trí đầu tiên mà các phần tử tương ứng không khớp |
equal | Kiểm tra xem hai phạm vi có bằng nhau hay không |
is_permutation | Kiểm tra xem hai phạm vi có phải là hoán vị của nhau hay không |
search | Tìm kiếm sự xuất hiện đầu tiên của một dãy con trong một phạm vi lớn hơn |
search_n | Tìm kiếm sự xuất hiện đầu tiên của n phần tử liên tiếp và giống nhau trong một phạm vi |
Các thao tác làm thay đổi chuỗi
copy | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác |
copy_n | Sao chép n phần tử từ một phạm vi nguồn sang một phạm vi đích khác |
copy_if | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác chỉ khi các phần tử đó thỏa mãn một điều kiện cụ thể được xác định bởi một hàm vị từ (predicate) |
copy_backward | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác, bắt đầu từ cuối của cả hai phạm vi và di chuyển ngược về phía đầu |
move | Di chuyển các phần tử từ một phạm vi nguồn sang một phạm vi đích khác, sử dụng move semantics |
move_backward | Di chuyển các phần tử từ một phạm vi nguồn sang một phạm vi đích khác |
swap | Hoán đổi giá trị của hai đối tượng |
swap_ranges | Hoán đổi các phần tử giữa hai phạm vi có cùng kích thước |
iter_swap | Hoán đổi giá trị của hai đối tượng được trỏ đến bởi hai iterator |
transform | Áp dụng một hàm cho mỗi phần tử trong một phạm vi đầu vào và lưu trữ kết quả vào một phạm vi đầu ra |
replace | Thay thế tất cả các lần xuất hiện của một giá trị cũ bằng một giá trị mới trong một phạm vi |
replace_if | Thay thế tất cả các phần tử trong một phạm vi thỏa mãn một điều kiện cụ thể bằng một giá trị mới |
replace_copy | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác |
replace_copy_if | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác |
fill | Gán một giá trị cho tất cả các phần tử trong một phạm vi được chỉ định |
fill_n | Gán một giá trị cho n phần tử liên tiếp, bắt đầu từ một vị trí được chỉ định |
generate | Gán các giá trị được sinh ra bởi một hàm cho các phần tử trong một phạm vi được chỉ định |
generate_n | Gán các giá trị được sinh ra bởi một hàm cho n phần tử liên tiếp, bắt đầu từ một vị trí được chỉ định |
remove | Di chuyển các phần tử không bị "xóa" lên đầu phạm vi, và trả về một iterator trỏ đến phần tử ngay sau phần tử cuối cùng của dãy mới |
remove_if | Di chuyển các phần tử không thỏa mãn điều kiện lên đầu phạm vi, và trả về một iterator trỏ đến phần tử ngay sau phần tử cuối cùng của dãy mới |
remove_copy | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác |
remove_copy_if | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác |
unique | Loại bỏ các phần tử trùng lặp liên tiếp ra khỏi một phạm vi |
unique_copy | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác |
reverse | Đảo ngược thứ tự các phần tử trong một phạm vi được chỉ định |
reverse_copy | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác theo thứ tự đảo ngược |
rotate | Xoay các phần tử trong một phạm vi sang trái |
rotate_copy | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác, đồng thời xoay các phần tử trong quá trình sao chép |
random_shuffle | Xáo trộn ngẫu nhiên các phần tử trong một phạm vi được chỉ định |
shuffle | Xáo trộn ngẫu nhiên các phần tử trong một phạm vi được chỉ định |
Các thao tác phân vùng
is_partitioned | Kiểm tra xem một phạm vi có được phân hoạch theo một điều kiện cho trước hay không |
partition | Sắp xếp lại các phần tử trong một phạm vi |
stable_partition | Phân hoạch các phần tử trong một phạm vi |
partition_copy | Sao chép các phần tử từ một phạm vi nguồn thành hai phạm vi đích khác nhau |
partition_point | Tìm vị trí "điểm phân hoạch" đầu tiên trong một phạm vi đã được phân hoạch |
Các thao tác sắp xếp
sort | Sắp xếp các phần tử trong một phạm vi theo thứ tự tăng dần hoặc theo một tiêu chí so sánh tùy chỉnh |
stable_sort | Sắp xếp các phần tử trong một phạm vi theo thứ tự tăng dần hoặc theo một tiêu chí so sánh tùy chỉnh |
partial_sort | Sắp xếp một phần của một phạm vi |
partial_sort_copy | Sao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích |
is_sorted | Kiểm tra xem một phạm vi đã được sắp xếp theo thứ tự tăng dần hay theo một tiêu chí so sánh tùy chỉnh hay chưa |
is_sorted_until | Tìm vị trí phần tử đầu tiên trong một phạm vi mà từ vị trí đó trở đi, phạm vi không còn được sắp xếp theo thứ tự tăng dần hoặc theo một tiêu chí so sánh tùy chỉnh |
nth_element | Sắp xếp một phần của một phạm vi sao cho phần tử tại vị trí nth sẽ là phần tử mà lẽ ra sẽ ở vị trí đó nếu toàn bộ phạm vi được sắp xếp |
Các thao tác tìm kiếm nhị phân
lower_bound | Tìm vị trí đầu tiên trong một phạm vi đã được sắp xếp mà có thể chèn một giá trị cho trước vào mà không làm mất tính sắp xếp của phạm vi |
upper_bound | Tìm vị trí đầu tiên trong một phạm vi đã được sắp xếp mà có thể chèn một giá trị cho trước vào mà không làm mất tính sắp xếp của phạm vi, nhưng phải đảm bảo giá trị được chèn vào sau tất cả các phần tử có giá trị bằng với nó |
equal_range | Tìm phạm vi con trong một phạm vi đã được sắp xếp mà chứa tất cả các phần tử có giá trị tương đương với một giá trị cho trước |
binary_search | Kiểm tra xem một giá trị cho trước có tồn tại trong một phạm vi đã được sắp xếp hay không, sử dụng thuật toán tìm kiếm nhị phân |
Các thao tác trộn
merge | Hợp nhất hai phạm vi đã được sắp xếp thành một phạm vi đầu ra duy nhất cũng đã được sắp xếp |
inplace_merge | Hợp nhất hai dãy con liên tiếp và đã được sắp xếp trong cùng một phạm vi thành một dãy được sắp xếp duy nhất tại chỗ |
includes | Kiểm tra xem một phạm vi đã được sắp xếp có chứa tất cả các phần tử của một phạm vi đã được sắp xếp khác hay không |
set_union | Tạo ra một phạm vi mới chứa hợp của hai phạm vi đã được sắp xếp đầu vào |
set_intersection | Tạo ra một phạm vi mới chứa giao của hai phạm vi đã được sắp xếp đầu vào |
set_difference | Tạo ra một phạm vi mới chứa hiệu của hai phạm vi đã được sắp xếp đầu vào |
set_symmetric_difference | Tạo ra một phạm vi mới chứa hiệu đối xứng của hai phạm vi đã được sắp xếp đầu vào |
Các thao tác trên heap
push_heap | Thêm một phần tử vào cuối của một max heap và điều chỉnh lại heap để duy trì tính chất của max heap |
pop_heap | Loại bỏ phần tử lớn nhất khỏi một max heap và điều chỉnh lại heap để duy trì tính chất của max heap |
make_heap | Biến đổi một phạm vi tùy ý thành một max heap |
sort_heap | Sắp xếp một phạm vi đã là max heap thành một dãy tăng dần (hoặc theo tiêu chí so sánh khác) |
is_heap | Kiểm tra xem một phạm vi có phải là max heap hay không hoặc có thỏa mãn tiêu chí heap tùy chỉnh hay không |
is_heap_until | Tìm vị trí phần tử đầu tiên trong một phạm vi mà từ vị trí đó trở đi, phạm vi không còn là một max heap hoặc không còn thỏa mãn tiêu chí heap tùy chỉnh |
Các thao tác tìm min/max
min | Trả về giá trị nhỏ nhất trong hai giá trị được cung cấp |
max | Trả về giá trị lớn nhất trong hai giá trị được cung cấp |
minmax | Trả về một cặp chứa giá trị nhỏ nhất và giá trị lớn nhất trong hai giá trị được cung cấp |
min_element | Tìm phần tử có giá trị nhỏ nhất trong một phạm vi được chỉ định |
max_element | Tìm phần tử có giá trị lớn nhất trong một phạm vi được chỉ định |
minmax_element | Tìm đồng thời phần tử có giá trị nhỏ nhất và phần tử có giá trị lớn nhất trong một phạm vi được chỉ định |
Khác
lexicographical_compare | So sánh hai phạm vi theo thứ tự từ điển |
next_permutation | Sắp xếp lại các phần tử trong một phạm vi thành hoán vị kế tiếp theo thứ tự từ điển tăng dần |
prev_permutation | Biến đổi một phạm vi thành hoán vị kế tiếp nhỏ hơn theo thứ tự từ điển |