10b57cec5SDimitry Andric// -*- C++ -*- 2349cc55cSDimitry Andric//===----------------------------------------------------------------------===// 30b57cec5SDimitry Andric// 40b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 50b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 60b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 70b57cec5SDimitry Andric// 80b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 90b57cec5SDimitry Andric 100b57cec5SDimitry Andric#ifndef _LIBCPP_ALGORITHM 110b57cec5SDimitry Andric#define _LIBCPP_ALGORITHM 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric/* 140b57cec5SDimitry Andric algorithm synopsis 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric#include <initializer_list> 170b57cec5SDimitry Andric 180b57cec5SDimitry Andricnamespace std 190b57cec5SDimitry Andric{ 200b57cec5SDimitry Andric 21*04eeddc0SDimitry Andricnamespace ranges { 22*04eeddc0SDimitry Andric template <class I1, class I2> 23*04eeddc0SDimitry Andric struct in_in_result; // since C++20 24*04eeddc0SDimitry Andric} 25*04eeddc0SDimitry Andric 260b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 270b57cec5SDimitry Andric constexpr bool // constexpr in C++20 280b57cec5SDimitry Andric all_of(InputIterator first, InputIterator last, Predicate pred); 290b57cec5SDimitry Andric 300b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 310b57cec5SDimitry Andric constexpr bool // constexpr in C++20 320b57cec5SDimitry Andric any_of(InputIterator first, InputIterator last, Predicate pred); 330b57cec5SDimitry Andric 340b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 350b57cec5SDimitry Andric constexpr bool // constexpr in C++20 360b57cec5SDimitry Andric none_of(InputIterator first, InputIterator last, Predicate pred); 370b57cec5SDimitry Andric 380b57cec5SDimitry Andrictemplate <class InputIterator, class Function> 390b57cec5SDimitry Andric constexpr Function // constexpr in C++20 400b57cec5SDimitry Andric for_each(InputIterator first, InputIterator last, Function f); 410b57cec5SDimitry Andric 420b57cec5SDimitry Andrictemplate<class InputIterator, class Size, class Function> 430b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 440b57cec5SDimitry Andric for_each_n(InputIterator first, Size n, Function f); // C++17 450b57cec5SDimitry Andric 460b57cec5SDimitry Andrictemplate <class InputIterator, class T> 470b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 480b57cec5SDimitry Andric find(InputIterator first, InputIterator last, const T& value); 490b57cec5SDimitry Andric 500b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 510b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 520b57cec5SDimitry Andric find_if(InputIterator first, InputIterator last, Predicate pred); 530b57cec5SDimitry Andric 540b57cec5SDimitry Andrictemplate<class InputIterator, class Predicate> 55e8d8bef9SDimitry Andric constexpr InputIterator // constexpr in C++20 560b57cec5SDimitry Andric find_if_not(InputIterator first, InputIterator last, Predicate pred); 570b57cec5SDimitry Andric 580b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 59e8d8bef9SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 600b57cec5SDimitry Andric find_end(ForwardIterator1 first1, ForwardIterator1 last1, 610b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 620b57cec5SDimitry Andric 630b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 64e8d8bef9SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 650b57cec5SDimitry Andric find_end(ForwardIterator1 first1, ForwardIterator1 last1, 660b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 670b57cec5SDimitry Andric 680b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 690b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 700b57cec5SDimitry Andric find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 710b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 720b57cec5SDimitry Andric 730b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 740b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 750b57cec5SDimitry Andric find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 760b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 770b57cec5SDimitry Andric 780b57cec5SDimitry Andrictemplate <class ForwardIterator> 790b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 800b57cec5SDimitry Andric adjacent_find(ForwardIterator first, ForwardIterator last); 810b57cec5SDimitry Andric 820b57cec5SDimitry Andrictemplate <class ForwardIterator, class BinaryPredicate> 830b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 840b57cec5SDimitry Andric adjacent_find(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 850b57cec5SDimitry Andric 860b57cec5SDimitry Andrictemplate <class InputIterator, class T> 870b57cec5SDimitry Andric constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 880b57cec5SDimitry Andric count(InputIterator first, InputIterator last, const T& value); 890b57cec5SDimitry Andric 900b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 910b57cec5SDimitry Andric constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 920b57cec5SDimitry Andric count_if(InputIterator first, InputIterator last, Predicate pred); 930b57cec5SDimitry Andric 940b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 950b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 960b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 970b57cec5SDimitry Andric 980b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 990b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1000b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 1010b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2); // **C++14** 1020b57cec5SDimitry Andric 1030b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1040b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1050b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 1060b57cec5SDimitry Andric InputIterator2 first2, BinaryPredicate pred); 1070b57cec5SDimitry Andric 1080b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1090b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1100b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 1110b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, 1120b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 1130b57cec5SDimitry Andric 1140b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 1150b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1160b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 1170b57cec5SDimitry Andric 1180b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 1190b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1200b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 1210b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2); // **C++14** 1220b57cec5SDimitry Andric 1230b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1240b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1250b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 1260b57cec5SDimitry Andric InputIterator2 first2, BinaryPredicate pred); 1270b57cec5SDimitry Andric 1280b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1290b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1300b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 1310b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, 1320b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 1330b57cec5SDimitry Andric 1340b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2> 1350b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1360b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1370b57cec5SDimitry Andric ForwardIterator2 first2); 1380b57cec5SDimitry Andric 1390b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2> 1400b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1410b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1420b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); // **C++14** 1430b57cec5SDimitry Andric 1440b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1450b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1460b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1470b57cec5SDimitry Andric ForwardIterator2 first2, BinaryPredicate pred); 1480b57cec5SDimitry Andric 1490b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1500b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1510b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1520b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, 1530b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 1540b57cec5SDimitry Andric 1550b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 1560b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 1570b57cec5SDimitry Andric search(ForwardIterator1 first1, ForwardIterator1 last1, 1580b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 1590b57cec5SDimitry Andric 1600b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1610b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 1620b57cec5SDimitry Andric search(ForwardIterator1 first1, ForwardIterator1 last1, 1630b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 1640b57cec5SDimitry Andric 1650b57cec5SDimitry Andrictemplate <class ForwardIterator, class Size, class T> 1660b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 1670b57cec5SDimitry Andric search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value); 1680b57cec5SDimitry Andric 1690b57cec5SDimitry Andrictemplate <class ForwardIterator, class Size, class T, class BinaryPredicate> 1700b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 1710b57cec5SDimitry Andric search_n(ForwardIterator first, ForwardIterator last, 1720b57cec5SDimitry Andric Size count, const T& value, BinaryPredicate pred); 1730b57cec5SDimitry Andric 1740b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator> 175480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 1760b57cec5SDimitry Andric copy(InputIterator first, InputIterator last, OutputIterator result); 1770b57cec5SDimitry Andric 1780b57cec5SDimitry Andrictemplate<class InputIterator, class OutputIterator, class Predicate> 179480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 1800b57cec5SDimitry Andric copy_if(InputIterator first, InputIterator last, 1810b57cec5SDimitry Andric OutputIterator result, Predicate pred); 1820b57cec5SDimitry Andric 1830b57cec5SDimitry Andrictemplate<class InputIterator, class Size, class OutputIterator> 184480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 1850b57cec5SDimitry Andric copy_n(InputIterator first, Size n, OutputIterator result); 1860b57cec5SDimitry Andric 1870b57cec5SDimitry Andrictemplate <class BidirectionalIterator1, class BidirectionalIterator2> 188480093f4SDimitry Andric constexpr BidirectionalIterator2 // constexpr in C++20 1890b57cec5SDimitry Andric copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 1900b57cec5SDimitry Andric BidirectionalIterator2 result); 1910b57cec5SDimitry Andric 1920b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 193e8d8bef9SDimitry Andric constexpr ForwardIterator2 // constexpr in C++20 1940b57cec5SDimitry Andric swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2); 1950b57cec5SDimitry Andric 1960b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 197e8d8bef9SDimitry Andric constexpr void // constexpr in C++20 1980b57cec5SDimitry Andric iter_swap(ForwardIterator1 a, ForwardIterator2 b); 1990b57cec5SDimitry Andric 2000b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class UnaryOperation> 2010b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2020b57cec5SDimitry Andric transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op); 2030b57cec5SDimitry Andric 2040b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation> 2050b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2060b57cec5SDimitry Andric transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 2070b57cec5SDimitry Andric OutputIterator result, BinaryOperation binary_op); 2080b57cec5SDimitry Andric 2090b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 2100b57cec5SDimitry Andric constexpr void // constexpr in C++20 2110b57cec5SDimitry Andric replace(ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value); 2120b57cec5SDimitry Andric 2130b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate, class T> 2140b57cec5SDimitry Andric constexpr void // constexpr in C++20 2150b57cec5SDimitry Andric replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, const T& new_value); 2160b57cec5SDimitry Andric 2170b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class T> 2180b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2190b57cec5SDimitry Andric replace_copy(InputIterator first, InputIterator last, OutputIterator result, 2200b57cec5SDimitry Andric const T& old_value, const T& new_value); 2210b57cec5SDimitry Andric 2220b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class Predicate, class T> 2230b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2240b57cec5SDimitry Andric replace_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value); 2250b57cec5SDimitry Andric 2260b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 2270b57cec5SDimitry Andric constexpr void // constexpr in C++20 2280b57cec5SDimitry Andric fill(ForwardIterator first, ForwardIterator last, const T& value); 2290b57cec5SDimitry Andric 2300b57cec5SDimitry Andrictemplate <class OutputIterator, class Size, class T> 2310b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2320b57cec5SDimitry Andric fill_n(OutputIterator first, Size n, const T& value); 2330b57cec5SDimitry Andric 2340b57cec5SDimitry Andrictemplate <class ForwardIterator, class Generator> 2350b57cec5SDimitry Andric constexpr void // constexpr in C++20 2360b57cec5SDimitry Andric generate(ForwardIterator first, ForwardIterator last, Generator gen); 2370b57cec5SDimitry Andric 2380b57cec5SDimitry Andrictemplate <class OutputIterator, class Size, class Generator> 2390b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2400b57cec5SDimitry Andric generate_n(OutputIterator first, Size n, Generator gen); 2410b57cec5SDimitry Andric 2420b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 2430b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2440b57cec5SDimitry Andric remove(ForwardIterator first, ForwardIterator last, const T& value); 2450b57cec5SDimitry Andric 2460b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 2470b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2480b57cec5SDimitry Andric remove_if(ForwardIterator first, ForwardIterator last, Predicate pred); 2490b57cec5SDimitry Andric 2500b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class T> 2510b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2520b57cec5SDimitry Andric remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value); 2530b57cec5SDimitry Andric 2540b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class Predicate> 2550b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2560b57cec5SDimitry Andric remove_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred); 2570b57cec5SDimitry Andric 2580b57cec5SDimitry Andrictemplate <class ForwardIterator> 259e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2600b57cec5SDimitry Andric unique(ForwardIterator first, ForwardIterator last); 2610b57cec5SDimitry Andric 2620b57cec5SDimitry Andrictemplate <class ForwardIterator, class BinaryPredicate> 263e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2640b57cec5SDimitry Andric unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 2650b57cec5SDimitry Andric 2660b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator> 267e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 2680b57cec5SDimitry Andric unique_copy(InputIterator first, InputIterator last, OutputIterator result); 2690b57cec5SDimitry Andric 2700b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class BinaryPredicate> 271e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 2720b57cec5SDimitry Andric unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred); 2730b57cec5SDimitry Andric 2740b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 275e8d8bef9SDimitry Andric constexpr void // constexpr in C++20 2760b57cec5SDimitry Andric reverse(BidirectionalIterator first, BidirectionalIterator last); 2770b57cec5SDimitry Andric 2780b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class OutputIterator> 2790b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2800b57cec5SDimitry Andric reverse_copy(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result); 2810b57cec5SDimitry Andric 2820b57cec5SDimitry Andrictemplate <class ForwardIterator> 283e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2840b57cec5SDimitry Andric rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last); 2850b57cec5SDimitry Andric 2860b57cec5SDimitry Andrictemplate <class ForwardIterator, class OutputIterator> 287e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 2880b57cec5SDimitry Andric rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result); 2890b57cec5SDimitry Andric 2900b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 2910b57cec5SDimitry Andric void 2920b57cec5SDimitry Andric random_shuffle(RandomAccessIterator first, RandomAccessIterator last); // deprecated in C++14, removed in C++17 2930b57cec5SDimitry Andric 2940b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class RandomNumberGenerator> 2950b57cec5SDimitry Andric void 2960b57cec5SDimitry Andric random_shuffle(RandomAccessIterator first, RandomAccessIterator last, 2970b57cec5SDimitry Andric RandomNumberGenerator& rand); // deprecated in C++14, removed in C++17 2980b57cec5SDimitry Andric 2990b57cec5SDimitry Andrictemplate<class PopulationIterator, class SampleIterator, 3000b57cec5SDimitry Andric class Distance, class UniformRandomBitGenerator> 3010b57cec5SDimitry Andric SampleIterator sample(PopulationIterator first, PopulationIterator last, 3020b57cec5SDimitry Andric SampleIterator out, Distance n, 3030b57cec5SDimitry Andric UniformRandomBitGenerator&& g); // C++17 3040b57cec5SDimitry Andric 3050b57cec5SDimitry Andrictemplate<class RandomAccessIterator, class UniformRandomNumberGenerator> 3060b57cec5SDimitry Andric void shuffle(RandomAccessIterator first, RandomAccessIterator last, 3070b57cec5SDimitry Andric UniformRandomNumberGenerator&& g); 3080b57cec5SDimitry Andric 309e8d8bef9SDimitry Andrictemplate<class ForwardIterator> 310e8d8bef9SDimitry Andric constexpr ForwardIterator 311e8d8bef9SDimitry Andric shift_left(ForwardIterator first, ForwardIterator last, 312e8d8bef9SDimitry Andric typename iterator_traits<ForwardIterator>::difference_type n); // C++20 313e8d8bef9SDimitry Andric 314e8d8bef9SDimitry Andrictemplate<class ForwardIterator> 315e8d8bef9SDimitry Andric constexpr ForwardIterator 316e8d8bef9SDimitry Andric shift_right(ForwardIterator first, ForwardIterator last, 317e8d8bef9SDimitry Andric typename iterator_traits<ForwardIterator>::difference_type n); // C++20 318e8d8bef9SDimitry Andric 3190b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 3200b57cec5SDimitry Andric constexpr bool // constexpr in C++20 3210b57cec5SDimitry Andric is_partitioned(InputIterator first, InputIterator last, Predicate pred); 3220b57cec5SDimitry Andric 3230b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 324e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3250b57cec5SDimitry Andric partition(ForwardIterator first, ForwardIterator last, Predicate pred); 3260b57cec5SDimitry Andric 3270b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator1, 3280b57cec5SDimitry Andric class OutputIterator2, class Predicate> 3290b57cec5SDimitry Andric constexpr pair<OutputIterator1, OutputIterator2> // constexpr in C++20 3300b57cec5SDimitry Andric partition_copy(InputIterator first, InputIterator last, 3310b57cec5SDimitry Andric OutputIterator1 out_true, OutputIterator2 out_false, 3320b57cec5SDimitry Andric Predicate pred); 3330b57cec5SDimitry Andric 3340b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 3350b57cec5SDimitry Andric ForwardIterator 3360b57cec5SDimitry Andric stable_partition(ForwardIterator first, ForwardIterator last, Predicate pred); 3370b57cec5SDimitry Andric 3380b57cec5SDimitry Andrictemplate<class ForwardIterator, class Predicate> 3390b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3400b57cec5SDimitry Andric partition_point(ForwardIterator first, ForwardIterator last, Predicate pred); 3410b57cec5SDimitry Andric 3420b57cec5SDimitry Andrictemplate <class ForwardIterator> 3430b57cec5SDimitry Andric constexpr bool // constexpr in C++20 3440b57cec5SDimitry Andric is_sorted(ForwardIterator first, ForwardIterator last); 3450b57cec5SDimitry Andric 3460b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 347e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 3480b57cec5SDimitry Andric is_sorted(ForwardIterator first, ForwardIterator last, Compare comp); 3490b57cec5SDimitry Andric 3500b57cec5SDimitry Andrictemplate<class ForwardIterator> 3510b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3520b57cec5SDimitry Andric is_sorted_until(ForwardIterator first, ForwardIterator last); 3530b57cec5SDimitry Andric 3540b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 3550b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3560b57cec5SDimitry Andric is_sorted_until(ForwardIterator first, ForwardIterator last, Compare comp); 3570b57cec5SDimitry Andric 3580b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 359fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3600b57cec5SDimitry Andric sort(RandomAccessIterator first, RandomAccessIterator last); 3610b57cec5SDimitry Andric 3620b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 363fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3640b57cec5SDimitry Andric sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 3650b57cec5SDimitry Andric 3660b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 3670b57cec5SDimitry Andric void 3680b57cec5SDimitry Andric stable_sort(RandomAccessIterator first, RandomAccessIterator last); 3690b57cec5SDimitry Andric 3700b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 3710b57cec5SDimitry Andric void 3720b57cec5SDimitry Andric stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 3730b57cec5SDimitry Andric 3740b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 375fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3760b57cec5SDimitry Andric partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last); 3770b57cec5SDimitry Andric 3780b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 379fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3800b57cec5SDimitry Andric partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp); 3810b57cec5SDimitry Andric 3820b57cec5SDimitry Andrictemplate <class InputIterator, class RandomAccessIterator> 383fe6060f1SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 3840b57cec5SDimitry Andric partial_sort_copy(InputIterator first, InputIterator last, 3850b57cec5SDimitry Andric RandomAccessIterator result_first, RandomAccessIterator result_last); 3860b57cec5SDimitry Andric 3870b57cec5SDimitry Andrictemplate <class InputIterator, class RandomAccessIterator, class Compare> 388fe6060f1SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 3890b57cec5SDimitry Andric partial_sort_copy(InputIterator first, InputIterator last, 3900b57cec5SDimitry Andric RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp); 3910b57cec5SDimitry Andric 3920b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 393fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3940b57cec5SDimitry Andric nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last); 3950b57cec5SDimitry Andric 3960b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 397fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3980b57cec5SDimitry Andric nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp); 3990b57cec5SDimitry Andric 4000b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4010b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4020b57cec5SDimitry Andric lower_bound(ForwardIterator first, ForwardIterator last, const T& value); 4030b57cec5SDimitry Andric 4040b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4050b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4060b57cec5SDimitry Andric lower_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4070b57cec5SDimitry Andric 4080b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4090b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4100b57cec5SDimitry Andric upper_bound(ForwardIterator first, ForwardIterator last, const T& value); 4110b57cec5SDimitry Andric 4120b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4130b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4140b57cec5SDimitry Andric upper_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4150b57cec5SDimitry Andric 4160b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4170b57cec5SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 4180b57cec5SDimitry Andric equal_range(ForwardIterator first, ForwardIterator last, const T& value); 4190b57cec5SDimitry Andric 4200b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4210b57cec5SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 4220b57cec5SDimitry Andric equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4230b57cec5SDimitry Andric 4240b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4250b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4260b57cec5SDimitry Andric binary_search(ForwardIterator first, ForwardIterator last, const T& value); 4270b57cec5SDimitry Andric 4280b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4290b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4300b57cec5SDimitry Andric binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4310b57cec5SDimitry Andric 4320b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 433e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4340b57cec5SDimitry Andric merge(InputIterator1 first1, InputIterator1 last1, 4350b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4360b57cec5SDimitry Andric 4370b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 438e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4390b57cec5SDimitry Andric merge(InputIterator1 first1, InputIterator1 last1, 4400b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4410b57cec5SDimitry Andric 4420b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 4430b57cec5SDimitry Andric void 4440b57cec5SDimitry Andric inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); 4450b57cec5SDimitry Andric 4460b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 4470b57cec5SDimitry Andric void 4480b57cec5SDimitry Andric inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp); 4490b57cec5SDimitry Andric 4500b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 4510b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4520b57cec5SDimitry Andric includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 4530b57cec5SDimitry Andric 4540b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class Compare> 4550b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4560b57cec5SDimitry Andric includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp); 4570b57cec5SDimitry Andric 4580b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 459e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4600b57cec5SDimitry Andric set_union(InputIterator1 first1, InputIterator1 last1, 4610b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4620b57cec5SDimitry Andric 4630b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 464e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4650b57cec5SDimitry Andric set_union(InputIterator1 first1, InputIterator1 last1, 4660b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4670b57cec5SDimitry Andric 4680b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 4690b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 4700b57cec5SDimitry Andric set_intersection(InputIterator1 first1, InputIterator1 last1, 4710b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4720b57cec5SDimitry Andric 4730b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 4740b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 4750b57cec5SDimitry Andric set_intersection(InputIterator1 first1, InputIterator1 last1, 4760b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4770b57cec5SDimitry Andric 4780b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 479e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4800b57cec5SDimitry Andric set_difference(InputIterator1 first1, InputIterator1 last1, 4810b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4820b57cec5SDimitry Andric 4830b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 484e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4850b57cec5SDimitry Andric set_difference(InputIterator1 first1, InputIterator1 last1, 4860b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4870b57cec5SDimitry Andric 4880b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 489e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4900b57cec5SDimitry Andric set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 4910b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4920b57cec5SDimitry Andric 4930b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 494e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4950b57cec5SDimitry Andric set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 4960b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4970b57cec5SDimitry Andric 4980b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 499fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5000b57cec5SDimitry Andric push_heap(RandomAccessIterator first, RandomAccessIterator last); 5010b57cec5SDimitry Andric 5020b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 503fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5040b57cec5SDimitry Andric push_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5050b57cec5SDimitry Andric 5060b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 507fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5080b57cec5SDimitry Andric pop_heap(RandomAccessIterator first, RandomAccessIterator last); 5090b57cec5SDimitry Andric 5100b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 511fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5120b57cec5SDimitry Andric pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5130b57cec5SDimitry Andric 5140b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 515fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5160b57cec5SDimitry Andric make_heap(RandomAccessIterator first, RandomAccessIterator last); 5170b57cec5SDimitry Andric 5180b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 519fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5200b57cec5SDimitry Andric make_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5210b57cec5SDimitry Andric 5220b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 523fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5240b57cec5SDimitry Andric sort_heap(RandomAccessIterator first, RandomAccessIterator last); 5250b57cec5SDimitry Andric 5260b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 527fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5280b57cec5SDimitry Andric sort_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5290b57cec5SDimitry Andric 5300b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 5310b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5320b57cec5SDimitry Andric is_heap(RandomAccessIterator first, RandomAccessiterator last); 5330b57cec5SDimitry Andric 5340b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 5350b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5360b57cec5SDimitry Andric is_heap(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 5370b57cec5SDimitry Andric 5380b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 5390b57cec5SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 5400b57cec5SDimitry Andric is_heap_until(RandomAccessIterator first, RandomAccessiterator last); 5410b57cec5SDimitry Andric 5420b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 5430b57cec5SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 5440b57cec5SDimitry Andric is_heap_until(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 5450b57cec5SDimitry Andric 5460b57cec5SDimitry Andrictemplate <class ForwardIterator> 547e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 548e8d8bef9SDimitry Andric min_element(ForwardIterator first, ForwardIterator last); 5490b57cec5SDimitry Andric 5500b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 551e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 552e8d8bef9SDimitry Andric min_element(ForwardIterator first, ForwardIterator last, Compare comp); 5530b57cec5SDimitry Andric 5540b57cec5SDimitry Andrictemplate <class T> 555e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 556e8d8bef9SDimitry Andric min(const T& a, const T& b); 5570b57cec5SDimitry Andric 5580b57cec5SDimitry Andrictemplate <class T, class Compare> 559e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 560e8d8bef9SDimitry Andric min(const T& a, const T& b, Compare comp); 5610b57cec5SDimitry Andric 5620b57cec5SDimitry Andrictemplate<class T> 563e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 564e8d8bef9SDimitry Andric min(initializer_list<T> t); 5650b57cec5SDimitry Andric 5660b57cec5SDimitry Andrictemplate<class T, class Compare> 567e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 568e8d8bef9SDimitry Andric min(initializer_list<T> t, Compare comp); 5690b57cec5SDimitry Andric 5700b57cec5SDimitry Andrictemplate<class T> 5710b57cec5SDimitry Andric constexpr const T& clamp(const T& v, const T& lo, const T& hi); // C++17 5720b57cec5SDimitry Andric 5730b57cec5SDimitry Andrictemplate<class T, class Compare> 5740b57cec5SDimitry Andric constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp); // C++17 5750b57cec5SDimitry Andric 5760b57cec5SDimitry Andrictemplate <class ForwardIterator> 577e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 578e8d8bef9SDimitry Andric max_element(ForwardIterator first, ForwardIterator last); 5790b57cec5SDimitry Andric 5800b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 581e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 582e8d8bef9SDimitry Andric max_element(ForwardIterator first, ForwardIterator last, Compare comp); 5830b57cec5SDimitry Andric 5840b57cec5SDimitry Andrictemplate <class T> 585e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 586e8d8bef9SDimitry Andric max(const T& a, const T& b); 5870b57cec5SDimitry Andric 5880b57cec5SDimitry Andrictemplate <class T, class Compare> 589e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 590e8d8bef9SDimitry Andric max(const T& a, const T& b, Compare comp); 5910b57cec5SDimitry Andric 5920b57cec5SDimitry Andrictemplate<class T> 593e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 594e8d8bef9SDimitry Andric max(initializer_list<T> t); 5950b57cec5SDimitry Andric 5960b57cec5SDimitry Andrictemplate<class T, class Compare> 597e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 598e8d8bef9SDimitry Andric max(initializer_list<T> t, Compare comp); 5990b57cec5SDimitry Andric 6000b57cec5SDimitry Andrictemplate<class ForwardIterator> 601e8d8bef9SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 602e8d8bef9SDimitry Andric minmax_element(ForwardIterator first, ForwardIterator last); 6030b57cec5SDimitry Andric 6040b57cec5SDimitry Andrictemplate<class ForwardIterator, class Compare> 605e8d8bef9SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 606e8d8bef9SDimitry Andric minmax_element(ForwardIterator first, ForwardIterator last, Compare comp); 6070b57cec5SDimitry Andric 6080b57cec5SDimitry Andrictemplate<class T> 609e8d8bef9SDimitry Andric constexpr pair<const T&, const T&> // constexpr in C++14 610e8d8bef9SDimitry Andric minmax(const T& a, const T& b); 6110b57cec5SDimitry Andric 6120b57cec5SDimitry Andrictemplate<class T, class Compare> 613e8d8bef9SDimitry Andric constexpr pair<const T&, const T&> // constexpr in C++14 614e8d8bef9SDimitry Andric minmax(const T& a, const T& b, Compare comp); 6150b57cec5SDimitry Andric 6160b57cec5SDimitry Andrictemplate<class T> 617e8d8bef9SDimitry Andric constexpr pair<T, T> // constexpr in C++14 618e8d8bef9SDimitry Andric minmax(initializer_list<T> t); 6190b57cec5SDimitry Andric 6200b57cec5SDimitry Andrictemplate<class T, class Compare> 621e8d8bef9SDimitry Andric constexpr pair<T, T> // constexpr in C++14 622e8d8bef9SDimitry Andric minmax(initializer_list<T> t, Compare comp); 6230b57cec5SDimitry Andric 6240b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 6250b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6260b57cec5SDimitry Andric lexicographical_compare(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 6270b57cec5SDimitry Andric 6280b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class Compare> 6290b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6300b57cec5SDimitry Andric lexicographical_compare(InputIterator1 first1, InputIterator1 last1, 6310b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, Compare comp); 6320b57cec5SDimitry Andric 6330b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 634e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6350b57cec5SDimitry Andric next_permutation(BidirectionalIterator first, BidirectionalIterator last); 6360b57cec5SDimitry Andric 6370b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 638e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6390b57cec5SDimitry Andric next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 6400b57cec5SDimitry Andric 6410b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 642e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6430b57cec5SDimitry Andric prev_permutation(BidirectionalIterator first, BidirectionalIterator last); 6440b57cec5SDimitry Andric 6450b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 646e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6470b57cec5SDimitry Andric prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 6480b57cec5SDimitry Andric 649*04eeddc0SDimitry Andricnamespace ranges { 650*04eeddc0SDimitry Andric// [algorithms.results], algorithm result types 651*04eeddc0SDimitry Andrictemplate<class InputIterator, class OutputIterator> 652*04eeddc0SDimitry Andric struct in_out_result; 653*04eeddc0SDimitry Andric} 654*04eeddc0SDimitry Andric 6550b57cec5SDimitry Andric} // std 6560b57cec5SDimitry Andric 6570b57cec5SDimitry Andric*/ 6580b57cec5SDimitry Andric 659*04eeddc0SDimitry Andric#include <__bits> // __libcpp_clz 6600b57cec5SDimitry Andric#include <__config> 661fe6060f1SDimitry Andric#include <__debug> 662fe6060f1SDimitry Andric#include <cstddef> 6630b57cec5SDimitry Andric#include <cstring> 664fe6060f1SDimitry Andric#include <functional> 665fe6060f1SDimitry Andric#include <initializer_list> 6660b57cec5SDimitry Andric#include <iterator> 667fe6060f1SDimitry Andric#include <memory> 668fe6060f1SDimitry Andric#include <type_traits> 669fe6060f1SDimitry Andric#include <utility> // swap_ranges 6700b57cec5SDimitry Andric#include <version> 6710b57cec5SDimitry Andric 672fe6060f1SDimitry Andric#include <__algorithm/adjacent_find.h> 673fe6060f1SDimitry Andric#include <__algorithm/all_of.h> 674fe6060f1SDimitry Andric#include <__algorithm/any_of.h> 675fe6060f1SDimitry Andric#include <__algorithm/binary_search.h> 676fe6060f1SDimitry Andric#include <__algorithm/clamp.h> 677fe6060f1SDimitry Andric#include <__algorithm/comp.h> 678fe6060f1SDimitry Andric#include <__algorithm/comp_ref_type.h> 679fe6060f1SDimitry Andric#include <__algorithm/copy.h> 680fe6060f1SDimitry Andric#include <__algorithm/copy_backward.h> 681fe6060f1SDimitry Andric#include <__algorithm/copy_if.h> 682fe6060f1SDimitry Andric#include <__algorithm/copy_n.h> 683fe6060f1SDimitry Andric#include <__algorithm/count.h> 684fe6060f1SDimitry Andric#include <__algorithm/count_if.h> 685fe6060f1SDimitry Andric#include <__algorithm/equal.h> 686fe6060f1SDimitry Andric#include <__algorithm/equal_range.h> 687fe6060f1SDimitry Andric#include <__algorithm/fill.h> 688*04eeddc0SDimitry Andric#include <__algorithm/fill_n.h> 689fe6060f1SDimitry Andric#include <__algorithm/find.h> 690fe6060f1SDimitry Andric#include <__algorithm/find_end.h> 691fe6060f1SDimitry Andric#include <__algorithm/find_first_of.h> 692fe6060f1SDimitry Andric#include <__algorithm/find_if.h> 693fe6060f1SDimitry Andric#include <__algorithm/find_if_not.h> 694fe6060f1SDimitry Andric#include <__algorithm/for_each.h> 695fe6060f1SDimitry Andric#include <__algorithm/for_each_n.h> 696fe6060f1SDimitry Andric#include <__algorithm/generate.h> 697*04eeddc0SDimitry Andric#include <__algorithm/generate_n.h> 698fe6060f1SDimitry Andric#include <__algorithm/half_positive.h> 699*04eeddc0SDimitry Andric#include <__algorithm/in_in_result.h> 700*04eeddc0SDimitry Andric#include <__algorithm/in_out_result.h> 701fe6060f1SDimitry Andric#include <__algorithm/includes.h> 702fe6060f1SDimitry Andric#include <__algorithm/inplace_merge.h> 703fe6060f1SDimitry Andric#include <__algorithm/is_heap.h> 704fe6060f1SDimitry Andric#include <__algorithm/is_heap_until.h> 705fe6060f1SDimitry Andric#include <__algorithm/is_partitioned.h> 706fe6060f1SDimitry Andric#include <__algorithm/is_permutation.h> 707fe6060f1SDimitry Andric#include <__algorithm/is_sorted.h> 708fe6060f1SDimitry Andric#include <__algorithm/is_sorted_until.h> 709fe6060f1SDimitry Andric#include <__algorithm/iter_swap.h> 710fe6060f1SDimitry Andric#include <__algorithm/lexicographical_compare.h> 711fe6060f1SDimitry Andric#include <__algorithm/lower_bound.h> 712fe6060f1SDimitry Andric#include <__algorithm/make_heap.h> 713fe6060f1SDimitry Andric#include <__algorithm/max.h> 714fe6060f1SDimitry Andric#include <__algorithm/max_element.h> 715fe6060f1SDimitry Andric#include <__algorithm/merge.h> 716fe6060f1SDimitry Andric#include <__algorithm/min.h> 717fe6060f1SDimitry Andric#include <__algorithm/min_element.h> 718fe6060f1SDimitry Andric#include <__algorithm/minmax.h> 719fe6060f1SDimitry Andric#include <__algorithm/minmax_element.h> 720fe6060f1SDimitry Andric#include <__algorithm/mismatch.h> 721fe6060f1SDimitry Andric#include <__algorithm/move.h> 722fe6060f1SDimitry Andric#include <__algorithm/move_backward.h> 723fe6060f1SDimitry Andric#include <__algorithm/next_permutation.h> 724fe6060f1SDimitry Andric#include <__algorithm/none_of.h> 725fe6060f1SDimitry Andric#include <__algorithm/nth_element.h> 726fe6060f1SDimitry Andric#include <__algorithm/partial_sort.h> 727fe6060f1SDimitry Andric#include <__algorithm/partial_sort_copy.h> 728fe6060f1SDimitry Andric#include <__algorithm/partition.h> 729fe6060f1SDimitry Andric#include <__algorithm/partition_copy.h> 730fe6060f1SDimitry Andric#include <__algorithm/partition_point.h> 731fe6060f1SDimitry Andric#include <__algorithm/pop_heap.h> 732fe6060f1SDimitry Andric#include <__algorithm/prev_permutation.h> 733fe6060f1SDimitry Andric#include <__algorithm/push_heap.h> 734fe6060f1SDimitry Andric#include <__algorithm/remove.h> 735fe6060f1SDimitry Andric#include <__algorithm/remove_copy.h> 736fe6060f1SDimitry Andric#include <__algorithm/remove_copy_if.h> 737fe6060f1SDimitry Andric#include <__algorithm/remove_if.h> 738fe6060f1SDimitry Andric#include <__algorithm/replace.h> 739fe6060f1SDimitry Andric#include <__algorithm/replace_copy.h> 740fe6060f1SDimitry Andric#include <__algorithm/replace_copy_if.h> 741fe6060f1SDimitry Andric#include <__algorithm/replace_if.h> 742fe6060f1SDimitry Andric#include <__algorithm/reverse.h> 743fe6060f1SDimitry Andric#include <__algorithm/reverse_copy.h> 744fe6060f1SDimitry Andric#include <__algorithm/rotate.h> 745fe6060f1SDimitry Andric#include <__algorithm/rotate_copy.h> 746fe6060f1SDimitry Andric#include <__algorithm/sample.h> 747fe6060f1SDimitry Andric#include <__algorithm/search.h> 748fe6060f1SDimitry Andric#include <__algorithm/search_n.h> 749fe6060f1SDimitry Andric#include <__algorithm/set_difference.h> 750fe6060f1SDimitry Andric#include <__algorithm/set_intersection.h> 751fe6060f1SDimitry Andric#include <__algorithm/set_symmetric_difference.h> 752fe6060f1SDimitry Andric#include <__algorithm/set_union.h> 753fe6060f1SDimitry Andric#include <__algorithm/shift_left.h> 754fe6060f1SDimitry Andric#include <__algorithm/shift_right.h> 755fe6060f1SDimitry Andric#include <__algorithm/shuffle.h> 756fe6060f1SDimitry Andric#include <__algorithm/sift_down.h> 757fe6060f1SDimitry Andric#include <__algorithm/sort.h> 758fe6060f1SDimitry Andric#include <__algorithm/sort_heap.h> 759fe6060f1SDimitry Andric#include <__algorithm/stable_partition.h> 760fe6060f1SDimitry Andric#include <__algorithm/stable_sort.h> 761fe6060f1SDimitry Andric#include <__algorithm/swap_ranges.h> 762fe6060f1SDimitry Andric#include <__algorithm/transform.h> 763fe6060f1SDimitry Andric#include <__algorithm/unique.h> 764*04eeddc0SDimitry Andric#include <__algorithm/unique_copy.h> 765fe6060f1SDimitry Andric#include <__algorithm/unwrap_iter.h> 766fe6060f1SDimitry Andric#include <__algorithm/upper_bound.h> 7670b57cec5SDimitry Andric 7680b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 7690b57cec5SDimitry Andric#pragma GCC system_header 7700b57cec5SDimitry Andric#endif 7710b57cec5SDimitry Andric 772e40139ffSDimitry Andric#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) && _LIBCPP_STD_VER >= 17 773e40139ffSDimitry Andric# include <__pstl_algorithm> 774e40139ffSDimitry Andric#endif 775e40139ffSDimitry Andric 7760b57cec5SDimitry Andric#endif // _LIBCPP_ALGORITHM 777