Skip to content

Instantly share code, notes, and snippets.

@acarabott
Last active October 7, 2021 22:00
Show Gist options
  • Save acarabott/dcaa41bc33baf8746cd8051519b6cd3c to your computer and use it in GitHub Desktop.
Save acarabott/dcaa41bc33baf8746cd8051519b6cd3c to your computer and use it in GitHub Desktop.
C++ std algorithm checklist

C++ Standard Library Algorithms (up to C++17)

A checklist of std algorithms, from https://en.cppreference.com/w/cpp/header/algorithm.

Non-modifying sequence operations

  • [] all_of, any_of, none_of - 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 - applies a function object to the first n elements of a sequence
  • [] count, count_if - returns the number of elements satisfying specific criteria
  • [] mismatch - finds the first position where two ranges differ
  • [] find, find_if, find_if_not - 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

Numeric operations

Defined in <numeric>

Minimum/maximum operations

  • [] 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 - returns the smaller and larger of two elements
  • [] minmax_element - returns the smallest and the largest elements in a range
  • [] clamp - clamps a value between a pair of boundary values

Comparison operations

Modifying sequence operations

  • [] copy, copy_if - copies a range of elements to a new location
  • [] copy_n - copies a number of elements to a new location
  • [] copy_backward - copies a range of elements in backwards order
  • [] move - moves a range of elements to a new location
  • [] move_backward - 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, storing results in a destination range
  • [] 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 - shifts elements in a range
  • [] random_shuffle, shuffle - randomly re-orders elements in a range
  • [] sample - 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

  • [] is_partitioned - determines if the range is partitioned by the given predicate
  • [] partition - divides a range of elements into two groups
  • [] partition_copy - copies a range dividing the elements into two groups
  • [] stable_partition - divides elements into two groups while preserving their relative order
  • [] partition_point - locates the partition point of a partitioned range

Sorting operations

  • [] is_sorted - checks whether a range is sorted into ascending order
  • [] is_sorted_until - 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)

  • [] lower_bound - returns an iterator to the first elementnot lessthan the given value
  • [] upper_bound - returns an iterator to the first elementgreaterthan 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

  • [] merge - merges two sorted ranges
  • [] inplace_merge - merges two ordered ranges in-place

Set operations (on sorted ranges)

Heap_operations

  • [] is_heap - checks if the given range is a max heap
  • [] is_heap_until - 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

Permutation operations

  • [] is_permutation - 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

Operations on uninitialized memory

C library

Defined in <cstdlib>

  • [] qsort - sorts a range of elements with unspecified type
  • [] bsearch - searches an array for an element of unspecified type
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment