Biblioteka standardowa dostarcza oczywiście dużo więcej narzędzi niż te, o których tu wspomnieliśmy. Pełny ich opis można znaleźć w książkach cytowanych w spisie literatury .
Poniżej podamy tylko nazwy i skrócony opis algorytmów z biblioteki standardowej, bez szczegółów; powinno to ułatwić poszukiwanie właściwego dla problemu nad którym pracujemy (na przykład ze strony en.cppreference.com):
*** Non-modifying sequence operations — header algorithm
all_of, any_of, none_of (C++11) checks if a predicate is true for all, any or none of the elements in a range
for_each applies a function to a range of elements
for_each_n (C++17) applies a function object to the first n elements of a sequence
countcount_if returns the number of elements satisfying specific criteria
mismatch finds the first position where two ranges differ
find, find_if, find_if_not (C++11) finds the first element satisfying specific criteria
find_end finds the last sequence of elements in a certain range
find_first_of searches for any one of a set of elements
adjacent_find finds the first two adjacent items that are equal (or satisfy a given predicate)
search searches for a range of elements
search_n searches a range for a number of consecutive copies of an element
*** Modifying sequence operations — header algorithm
copy, copy_if (C++11) copies a range of elements to a new location
copy_n (C++11) copies a number of elements to a new location
copy_backward copies a range of elements in backwards order
move (C++11) moves a range of elements to a new location
move_backward (C++11) moves a range of elements to a new location in backwards order
fill copy-assigns the given value to every element in a range
fill_n copy-assigns the given value to N elements in a range
transform applies a function to a range of elements
generate assigns the results of successive function calls to every element in a range
generate_n assigns the results of successive function calls to N elements in a range
remove, remove_if removes elements satisfying specific criteria
remove_copy, remove_copy_if copies a range of elements omitting those that satisfy specific criteria
replace, replace_if replaces all values satisfying specific criteria with another value
replace_copy, replace_copy_if copies a range, replacing elements satisfying specific criteria with another value
swap swaps the values of two objects
swap_ranges swaps two ranges of elements
iter_swap swaps the elements pointed to by two iterators
reverse reverses the order of elements in a range
reverse_copy creates a copy of a range that is reversed
rotate rotates the order of elements in a range
rotate_copy copies and rotate a range of elements
shift_left, shift_right (C++20) shifts elements in a range
shuffle (C++11) randomly re-orders elements in a range
sample (C++17) selects n random elements from a sequence
unique removes consecutive duplicate elements in a range
unique_copy creates a copy of some range of elements that contains no consecutive duplicates
*** Partitioning operations — header algorithm
is_partitioned (C++11) determines if the range is partitioned by the given predicate
partition divides a range of elements into two groups
partition_copy (C++11) copies a range dividing the elements into two groups
stable_partition divides elements into two groups while preserving their relative order
partition_point (C++11) locates the partition point of a partitioned range
*** Sorting operations — header algorithm
is_sorted (C++11) checks whether a range is sorted into ascending order
is_sorted_until (C++11) finds the largest sorted subrange
sort sorts a range into ascending order
partial_sort sorts the first N elements of a range
partial_sort_copy copies and partially sorts a range of elements
stable_sort sorts a range of elements while preserving order between equal elements
nth_element partially sorts the given range making sure that it is partitioned by the given element
*** Binary search operations on sorted ranges — header algorithm
lower_bound returns an iterator to the first element not less than the given value
upper_bound returns an iterator to the first element greater than a certain value
binary_search determines if an element exists in a certain range
equal_range returns range of elements matching a specific key
*** Other operations on sorted ranges — header algorithm
merge merges two sorted ranges
inplace_merge merges two ordered ranges in-place
*** Set operations on sorted ranges — header algorithm
includes returns true if one set is a subset of another
set_difference computes the difference between two sets
set_intersection computes the intersection of two sets
set_symmetric_difference computes the symmetric difference between two sets
set_union computes the union of two sets
*** Heap operations — header algorithm
is_heap (C++11) checks if the given range is a max heap
is_heap_until (C++11) finds the largest subrange that is a max heap
make_heap creates a max heap out of a range of elements
push_heap adds an element to a max heap
pop_heap removes the largest element from a max heap
sort_heap turns a max heap into a range of elements sorted in ascending order
*** Minimum/maximum operations — header algorithm
max returns the greater of the given values
max_element returns the largest element in a range
min returns the smaller of the given values
min_element returns the smallest element in a range
minmax (C++11) returns the smaller and larger of two elements
minmax_element (C++11) returns the smallest and the largest elements in a range
clamp (C++17) clamps a value between a pair of boundary values
*** Comparison operations — header algorithm
equal determines if two sets of elements are the same
lexicographical_compare returns true if one range is lexicographically less than another
compare_3way (C++20) compares two values using three-way comparison
lexicographical_compare_3way (C++20) compares two ranges using three-way comparison
*** Permutation operations — header algorithm
is_permutation (C++11) determines if a sequence is a permutation of another sequence
next_permutation generates the next greater lexicographic permutation of a range of elements
prev_permutation generates the next smaller lexicographic permutation of a range of elements
*** Numeric operations — header numeric
iota (C++11) fills a range with successive increments of the starting value
accumulate sums up a range of elements
inner_product computes the inner product of two ranges of elements
adjacent_difference computes the differences between adjacent elements in a range
partial_sum computes the partial sum of a range of elements
reduce (C++17) similar to std::accumulate, except out of order
exclusive_scan (C++17) similar to std::partial_sum, excludes the ith input element from the ith sum
inclusive_scan (C++17) similar to std::partial_sum, includes the ith input element in the ith sum
transform_reduce (C++17) applies a functor, then reduces out of order
transform_exclusive_scan (C++17) applies a functor, then calculates exclusive scan
transform_inclusive_scan (C++17) applies a functor, then calculates inclusive scan
*** Operations on uninitialized memory — header memory
uninitialized_copy copies a range of objects to an uninitialized area of memory
uninitialized_copy_n (C++11) copies a number of objects to an uninitialized area of memory
uninitialized_fill copies an object to an uninitialized area of memory, defined by a range
uninitialized_fill_n copies an object to an uninitialized area of memory, defined by a start and a count
uninitialized_move (C++17) moves a range of objects to an uninitialized area of memory
uninitialized_move_n (C++17) moves a number of objects to an uninitialized area of memory
uninitialized_default_construct (C++17) constructs objects by default-initialization in an uninitialized area of memory, defined by a range
uninitialized_default_construct_n (C++17) constructs objects by default-initialization in an uninitialized area of memory, defined by a start and a count
uninitialized_value_construct (C++17) constructs objects by value-initialization in an uninitialized area of memory, defined by a range
uninitialized_value_construct_n (C++17) constructs objects by value-initialization in an uninitialized area of memory, defined by a start and a count
destroy_at (C++17) destroys an object at a given address
destroy (C++17) destroys a range of objects
destroy_n (C++17) destroys a number of objects in a range
T.R. Werner, 23 lutego 2022; 19:40