Chuyển tới nội dung chính

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_ofKiể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_ofKiể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_ofKiể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
findTì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_ifTì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_notTì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_endTì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_ofTì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_findTì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ừ
mismatchSo 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
equalKiểm tra xem hai phạm vi có bằng nhau hay không
is_permutationKiểm tra xem hai phạm vi có phải là hoán vị của nhau hay không
searchTì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_nTì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

copySao 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_nSao chép n phần tử từ một phạm vi nguồn sang một phạm vi đích khác
copy_ifSao 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_backwardSao 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
moveDi 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_backwardDi chuyển các phần tử từ một phạm vi nguồn sang một phạm vi đích khác
swapHoán đổi giá trị của hai đối tượng
swap_rangesHoán đổi các phần tử giữa hai phạm vi có cùng kích thước
iter_swapHoá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
replaceThay 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_ifThay 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_copySao 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_ifSao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác
fillGán một giá trị cho tất cả các phần tử trong một phạm vi được chỉ định
fill_nGá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
generateGá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_nGá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
removeDi 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_ifDi 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_copySao 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_ifSao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích khác
uniqueLoại bỏ các phần tử trùng lặp liên tiếp ra khỏi một phạm vi
unique_copySao 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_copySao 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
rotateXoay các phần tử trong một phạm vi sang trái
rotate_copySao 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_shuffleXáo trộn ngẫu nhiên các phần tử trong một phạm vi được chỉ định
shuffleXá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_partitionedKiể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
partitionSắp xếp lại các phần tử trong một phạm vi
stable_partitionPhân hoạch các phần tử trong một phạm vi
partition_copySao 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_pointTì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

sortSắ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_sortSắ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_sortSắp xếp một phần của một phạm vi
partial_sort_copySao chép các phần tử từ một phạm vi nguồn sang một phạm vi đích
is_sortedKiể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_untilTì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_elementSắ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_boundTì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_boundTì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_rangeTì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_searchKiể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

mergeHợ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_mergeHợ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ỗ
includesKiể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_unionTạ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_intersectionTạ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_differenceTạ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_differenceTạ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_heapThê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_heapLoạ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_heapBiến đổi một phạm vi tùy ý thành một max heap
sort_heapSắ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_heapKiể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_untilTì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

minTrả về giá trị nhỏ nhất trong hai giá trị được cung cấp
maxTrả về giá trị lớn nhất trong hai giá trị được cung cấp
minmaxTrả 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_elementTìm phần tử có giá trị nhỏ nhất trong một phạm vi được chỉ định
max_elementTìm phần tử có giá trị lớn nhất trong một phạm vi được chỉ định
minmax_elementTì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_compareSo sánh hai phạm vi theo thứ tự từ điển
next_permutationSắ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_permutationBiến đổi một phạm vi thành hoán vị kế tiếp nhỏ hơn theo thứ tự từ điển