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 2104eeddc0SDimitry Andricnamespace ranges { 2204eeddc0SDimitry Andric template <class I1, class I2> 2304eeddc0SDimitry Andric struct in_in_result; // since C++20 24*1fd87a68SDimitry Andric 25*1fd87a68SDimitry Andric template <class I1, class I2, class O> 26*1fd87a68SDimitry Andric struct in_in_out_result; // since C++20 2704eeddc0SDimitry Andric} 2804eeddc0SDimitry Andric 290b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 300b57cec5SDimitry Andric constexpr bool // constexpr in C++20 310b57cec5SDimitry Andric all_of(InputIterator first, InputIterator last, Predicate pred); 320b57cec5SDimitry Andric 330b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 340b57cec5SDimitry Andric constexpr bool // constexpr in C++20 350b57cec5SDimitry Andric any_of(InputIterator first, InputIterator last, Predicate pred); 360b57cec5SDimitry Andric 370b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 380b57cec5SDimitry Andric constexpr bool // constexpr in C++20 390b57cec5SDimitry Andric none_of(InputIterator first, InputIterator last, Predicate pred); 400b57cec5SDimitry Andric 410b57cec5SDimitry Andrictemplate <class InputIterator, class Function> 420b57cec5SDimitry Andric constexpr Function // constexpr in C++20 430b57cec5SDimitry Andric for_each(InputIterator first, InputIterator last, Function f); 440b57cec5SDimitry Andric 450b57cec5SDimitry Andrictemplate<class InputIterator, class Size, class Function> 460b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 470b57cec5SDimitry Andric for_each_n(InputIterator first, Size n, Function f); // C++17 480b57cec5SDimitry Andric 490b57cec5SDimitry Andrictemplate <class InputIterator, class T> 500b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 510b57cec5SDimitry Andric find(InputIterator first, InputIterator last, const T& value); 520b57cec5SDimitry Andric 530b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 540b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 550b57cec5SDimitry Andric find_if(InputIterator first, InputIterator last, Predicate pred); 560b57cec5SDimitry Andric 570b57cec5SDimitry Andrictemplate<class InputIterator, class Predicate> 58e8d8bef9SDimitry Andric constexpr InputIterator // constexpr in C++20 590b57cec5SDimitry Andric find_if_not(InputIterator first, InputIterator last, Predicate pred); 600b57cec5SDimitry Andric 610b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 62e8d8bef9SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 630b57cec5SDimitry Andric find_end(ForwardIterator1 first1, ForwardIterator1 last1, 640b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 650b57cec5SDimitry Andric 660b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 67e8d8bef9SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 680b57cec5SDimitry Andric find_end(ForwardIterator1 first1, ForwardIterator1 last1, 690b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 700b57cec5SDimitry Andric 710b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 720b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 730b57cec5SDimitry Andric find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 740b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 750b57cec5SDimitry Andric 760b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 770b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 780b57cec5SDimitry Andric find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 790b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 800b57cec5SDimitry Andric 810b57cec5SDimitry Andrictemplate <class ForwardIterator> 820b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 830b57cec5SDimitry Andric adjacent_find(ForwardIterator first, ForwardIterator last); 840b57cec5SDimitry Andric 850b57cec5SDimitry Andrictemplate <class ForwardIterator, class BinaryPredicate> 860b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 870b57cec5SDimitry Andric adjacent_find(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 880b57cec5SDimitry Andric 890b57cec5SDimitry Andrictemplate <class InputIterator, class T> 900b57cec5SDimitry Andric constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 910b57cec5SDimitry Andric count(InputIterator first, InputIterator last, const T& value); 920b57cec5SDimitry Andric 930b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 940b57cec5SDimitry Andric constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 950b57cec5SDimitry Andric count_if(InputIterator first, InputIterator last, Predicate pred); 960b57cec5SDimitry Andric 970b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 980b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 990b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 1000b57cec5SDimitry Andric 1010b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 1020b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1030b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 1040b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2); // **C++14** 1050b57cec5SDimitry Andric 1060b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1070b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1080b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 1090b57cec5SDimitry Andric InputIterator2 first2, BinaryPredicate pred); 1100b57cec5SDimitry Andric 1110b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1120b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1130b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 1140b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, 1150b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 1160b57cec5SDimitry Andric 1170b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 1180b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1190b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 1200b57cec5SDimitry Andric 1210b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 1220b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1230b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 1240b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2); // **C++14** 1250b57cec5SDimitry Andric 1260b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1270b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1280b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 1290b57cec5SDimitry Andric InputIterator2 first2, BinaryPredicate pred); 1300b57cec5SDimitry Andric 1310b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1320b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1330b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 1340b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, 1350b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 1360b57cec5SDimitry Andric 1370b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2> 1380b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1390b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1400b57cec5SDimitry Andric ForwardIterator2 first2); 1410b57cec5SDimitry Andric 1420b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2> 1430b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1440b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1450b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); // **C++14** 1460b57cec5SDimitry Andric 1470b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1480b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1490b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1500b57cec5SDimitry Andric ForwardIterator2 first2, BinaryPredicate pred); 1510b57cec5SDimitry Andric 1520b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1530b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1540b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1550b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, 1560b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 1570b57cec5SDimitry Andric 1580b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 1590b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 1600b57cec5SDimitry Andric search(ForwardIterator1 first1, ForwardIterator1 last1, 1610b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 1620b57cec5SDimitry Andric 1630b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1640b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 1650b57cec5SDimitry Andric search(ForwardIterator1 first1, ForwardIterator1 last1, 1660b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 1670b57cec5SDimitry Andric 1680b57cec5SDimitry Andrictemplate <class ForwardIterator, class Size, class T> 1690b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 1700b57cec5SDimitry Andric search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value); 1710b57cec5SDimitry Andric 1720b57cec5SDimitry Andrictemplate <class ForwardIterator, class Size, class T, class BinaryPredicate> 1730b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 1740b57cec5SDimitry Andric search_n(ForwardIterator first, ForwardIterator last, 1750b57cec5SDimitry Andric Size count, const T& value, BinaryPredicate pred); 1760b57cec5SDimitry Andric 1770b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator> 178480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 1790b57cec5SDimitry Andric copy(InputIterator first, InputIterator last, OutputIterator result); 1800b57cec5SDimitry Andric 1810b57cec5SDimitry Andrictemplate<class InputIterator, class OutputIterator, class Predicate> 182480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 1830b57cec5SDimitry Andric copy_if(InputIterator first, InputIterator last, 1840b57cec5SDimitry Andric OutputIterator result, Predicate pred); 1850b57cec5SDimitry Andric 1860b57cec5SDimitry Andrictemplate<class InputIterator, class Size, class OutputIterator> 187480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 1880b57cec5SDimitry Andric copy_n(InputIterator first, Size n, OutputIterator result); 1890b57cec5SDimitry Andric 1900b57cec5SDimitry Andrictemplate <class BidirectionalIterator1, class BidirectionalIterator2> 191480093f4SDimitry Andric constexpr BidirectionalIterator2 // constexpr in C++20 1920b57cec5SDimitry Andric copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 1930b57cec5SDimitry Andric BidirectionalIterator2 result); 1940b57cec5SDimitry Andric 1950b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 196e8d8bef9SDimitry Andric constexpr ForwardIterator2 // constexpr in C++20 1970b57cec5SDimitry Andric swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2); 1980b57cec5SDimitry Andric 1990b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 200e8d8bef9SDimitry Andric constexpr void // constexpr in C++20 2010b57cec5SDimitry Andric iter_swap(ForwardIterator1 a, ForwardIterator2 b); 2020b57cec5SDimitry Andric 2030b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class UnaryOperation> 2040b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2050b57cec5SDimitry Andric transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op); 2060b57cec5SDimitry Andric 2070b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation> 2080b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2090b57cec5SDimitry Andric transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 2100b57cec5SDimitry Andric OutputIterator result, BinaryOperation binary_op); 2110b57cec5SDimitry Andric 2120b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 2130b57cec5SDimitry Andric constexpr void // constexpr in C++20 2140b57cec5SDimitry Andric replace(ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value); 2150b57cec5SDimitry Andric 2160b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate, class T> 2170b57cec5SDimitry Andric constexpr void // constexpr in C++20 2180b57cec5SDimitry Andric replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, const T& new_value); 2190b57cec5SDimitry Andric 2200b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class T> 2210b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2220b57cec5SDimitry Andric replace_copy(InputIterator first, InputIterator last, OutputIterator result, 2230b57cec5SDimitry Andric const T& old_value, const T& new_value); 2240b57cec5SDimitry Andric 2250b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class Predicate, class T> 2260b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2270b57cec5SDimitry Andric replace_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value); 2280b57cec5SDimitry Andric 2290b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 2300b57cec5SDimitry Andric constexpr void // constexpr in C++20 2310b57cec5SDimitry Andric fill(ForwardIterator first, ForwardIterator last, const T& value); 2320b57cec5SDimitry Andric 2330b57cec5SDimitry Andrictemplate <class OutputIterator, class Size, class T> 2340b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2350b57cec5SDimitry Andric fill_n(OutputIterator first, Size n, const T& value); 2360b57cec5SDimitry Andric 2370b57cec5SDimitry Andrictemplate <class ForwardIterator, class Generator> 2380b57cec5SDimitry Andric constexpr void // constexpr in C++20 2390b57cec5SDimitry Andric generate(ForwardIterator first, ForwardIterator last, Generator gen); 2400b57cec5SDimitry Andric 2410b57cec5SDimitry Andrictemplate <class OutputIterator, class Size, class Generator> 2420b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2430b57cec5SDimitry Andric generate_n(OutputIterator first, Size n, Generator gen); 2440b57cec5SDimitry Andric 2450b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 2460b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2470b57cec5SDimitry Andric remove(ForwardIterator first, ForwardIterator last, const T& value); 2480b57cec5SDimitry Andric 2490b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 2500b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2510b57cec5SDimitry Andric remove_if(ForwardIterator first, ForwardIterator last, Predicate pred); 2520b57cec5SDimitry Andric 2530b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class T> 2540b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2550b57cec5SDimitry Andric remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value); 2560b57cec5SDimitry Andric 2570b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class Predicate> 2580b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2590b57cec5SDimitry Andric remove_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred); 2600b57cec5SDimitry Andric 2610b57cec5SDimitry Andrictemplate <class ForwardIterator> 262e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2630b57cec5SDimitry Andric unique(ForwardIterator first, ForwardIterator last); 2640b57cec5SDimitry Andric 2650b57cec5SDimitry Andrictemplate <class ForwardIterator, class BinaryPredicate> 266e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2670b57cec5SDimitry Andric unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 2680b57cec5SDimitry Andric 2690b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator> 270e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 2710b57cec5SDimitry Andric unique_copy(InputIterator first, InputIterator last, OutputIterator result); 2720b57cec5SDimitry Andric 2730b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class BinaryPredicate> 274e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 2750b57cec5SDimitry Andric unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred); 2760b57cec5SDimitry Andric 2770b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 278e8d8bef9SDimitry Andric constexpr void // constexpr in C++20 2790b57cec5SDimitry Andric reverse(BidirectionalIterator first, BidirectionalIterator last); 2800b57cec5SDimitry Andric 2810b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class OutputIterator> 2820b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2830b57cec5SDimitry Andric reverse_copy(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result); 2840b57cec5SDimitry Andric 2850b57cec5SDimitry Andrictemplate <class ForwardIterator> 286e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2870b57cec5SDimitry Andric rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last); 2880b57cec5SDimitry Andric 2890b57cec5SDimitry Andrictemplate <class ForwardIterator, class OutputIterator> 290e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 2910b57cec5SDimitry Andric rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result); 2920b57cec5SDimitry Andric 2930b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 2940b57cec5SDimitry Andric void 2950b57cec5SDimitry Andric random_shuffle(RandomAccessIterator first, RandomAccessIterator last); // deprecated in C++14, removed in C++17 2960b57cec5SDimitry Andric 2970b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class RandomNumberGenerator> 2980b57cec5SDimitry Andric void 2990b57cec5SDimitry Andric random_shuffle(RandomAccessIterator first, RandomAccessIterator last, 3000b57cec5SDimitry Andric RandomNumberGenerator& rand); // deprecated in C++14, removed in C++17 3010b57cec5SDimitry Andric 3020b57cec5SDimitry Andrictemplate<class PopulationIterator, class SampleIterator, 3030b57cec5SDimitry Andric class Distance, class UniformRandomBitGenerator> 3040b57cec5SDimitry Andric SampleIterator sample(PopulationIterator first, PopulationIterator last, 3050b57cec5SDimitry Andric SampleIterator out, Distance n, 3060b57cec5SDimitry Andric UniformRandomBitGenerator&& g); // C++17 3070b57cec5SDimitry Andric 3080b57cec5SDimitry Andrictemplate<class RandomAccessIterator, class UniformRandomNumberGenerator> 3090b57cec5SDimitry Andric void shuffle(RandomAccessIterator first, RandomAccessIterator last, 3100b57cec5SDimitry Andric UniformRandomNumberGenerator&& g); 3110b57cec5SDimitry Andric 312e8d8bef9SDimitry Andrictemplate<class ForwardIterator> 313e8d8bef9SDimitry Andric constexpr ForwardIterator 314e8d8bef9SDimitry Andric shift_left(ForwardIterator first, ForwardIterator last, 315e8d8bef9SDimitry Andric typename iterator_traits<ForwardIterator>::difference_type n); // C++20 316e8d8bef9SDimitry Andric 317e8d8bef9SDimitry Andrictemplate<class ForwardIterator> 318e8d8bef9SDimitry Andric constexpr ForwardIterator 319e8d8bef9SDimitry Andric shift_right(ForwardIterator first, ForwardIterator last, 320e8d8bef9SDimitry Andric typename iterator_traits<ForwardIterator>::difference_type n); // C++20 321e8d8bef9SDimitry Andric 3220b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 3230b57cec5SDimitry Andric constexpr bool // constexpr in C++20 3240b57cec5SDimitry Andric is_partitioned(InputIterator first, InputIterator last, Predicate pred); 3250b57cec5SDimitry Andric 3260b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 327e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3280b57cec5SDimitry Andric partition(ForwardIterator first, ForwardIterator last, Predicate pred); 3290b57cec5SDimitry Andric 3300b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator1, 3310b57cec5SDimitry Andric class OutputIterator2, class Predicate> 3320b57cec5SDimitry Andric constexpr pair<OutputIterator1, OutputIterator2> // constexpr in C++20 3330b57cec5SDimitry Andric partition_copy(InputIterator first, InputIterator last, 3340b57cec5SDimitry Andric OutputIterator1 out_true, OutputIterator2 out_false, 3350b57cec5SDimitry Andric Predicate pred); 3360b57cec5SDimitry Andric 3370b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 3380b57cec5SDimitry Andric ForwardIterator 3390b57cec5SDimitry Andric stable_partition(ForwardIterator first, ForwardIterator last, Predicate pred); 3400b57cec5SDimitry Andric 3410b57cec5SDimitry Andrictemplate<class ForwardIterator, class Predicate> 3420b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3430b57cec5SDimitry Andric partition_point(ForwardIterator first, ForwardIterator last, Predicate pred); 3440b57cec5SDimitry Andric 3450b57cec5SDimitry Andrictemplate <class ForwardIterator> 3460b57cec5SDimitry Andric constexpr bool // constexpr in C++20 3470b57cec5SDimitry Andric is_sorted(ForwardIterator first, ForwardIterator last); 3480b57cec5SDimitry Andric 3490b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 350e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 3510b57cec5SDimitry Andric is_sorted(ForwardIterator first, ForwardIterator last, Compare comp); 3520b57cec5SDimitry Andric 3530b57cec5SDimitry Andrictemplate<class ForwardIterator> 3540b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3550b57cec5SDimitry Andric is_sorted_until(ForwardIterator first, ForwardIterator last); 3560b57cec5SDimitry Andric 3570b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 3580b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3590b57cec5SDimitry Andric is_sorted_until(ForwardIterator first, ForwardIterator last, Compare comp); 3600b57cec5SDimitry Andric 3610b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 362fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3630b57cec5SDimitry Andric sort(RandomAccessIterator first, RandomAccessIterator last); 3640b57cec5SDimitry Andric 3650b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 366fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3670b57cec5SDimitry Andric sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 3680b57cec5SDimitry Andric 3690b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 3700b57cec5SDimitry Andric void 3710b57cec5SDimitry Andric stable_sort(RandomAccessIterator first, RandomAccessIterator last); 3720b57cec5SDimitry Andric 3730b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 3740b57cec5SDimitry Andric void 3750b57cec5SDimitry Andric stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 3760b57cec5SDimitry Andric 3770b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 378fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3790b57cec5SDimitry Andric partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last); 3800b57cec5SDimitry Andric 3810b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 382fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3830b57cec5SDimitry Andric partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp); 3840b57cec5SDimitry Andric 3850b57cec5SDimitry Andrictemplate <class InputIterator, class RandomAccessIterator> 386fe6060f1SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 3870b57cec5SDimitry Andric partial_sort_copy(InputIterator first, InputIterator last, 3880b57cec5SDimitry Andric RandomAccessIterator result_first, RandomAccessIterator result_last); 3890b57cec5SDimitry Andric 3900b57cec5SDimitry Andrictemplate <class InputIterator, class RandomAccessIterator, class Compare> 391fe6060f1SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 3920b57cec5SDimitry Andric partial_sort_copy(InputIterator first, InputIterator last, 3930b57cec5SDimitry Andric RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp); 3940b57cec5SDimitry Andric 3950b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 396fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3970b57cec5SDimitry Andric nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last); 3980b57cec5SDimitry Andric 3990b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 400fe6060f1SDimitry Andric constexpr void // constexpr in C++20 4010b57cec5SDimitry Andric nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp); 4020b57cec5SDimitry Andric 4030b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4040b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4050b57cec5SDimitry Andric lower_bound(ForwardIterator first, ForwardIterator last, const T& value); 4060b57cec5SDimitry Andric 4070b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4080b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4090b57cec5SDimitry Andric lower_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4100b57cec5SDimitry Andric 4110b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4120b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4130b57cec5SDimitry Andric upper_bound(ForwardIterator first, ForwardIterator last, const T& value); 4140b57cec5SDimitry Andric 4150b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4160b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4170b57cec5SDimitry Andric upper_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4180b57cec5SDimitry Andric 4190b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4200b57cec5SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 4210b57cec5SDimitry Andric equal_range(ForwardIterator first, ForwardIterator last, const T& value); 4220b57cec5SDimitry Andric 4230b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4240b57cec5SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 4250b57cec5SDimitry Andric equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4260b57cec5SDimitry Andric 4270b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4280b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4290b57cec5SDimitry Andric binary_search(ForwardIterator first, ForwardIterator last, const T& value); 4300b57cec5SDimitry Andric 4310b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4320b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4330b57cec5SDimitry Andric binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4340b57cec5SDimitry Andric 4350b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 436e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4370b57cec5SDimitry Andric merge(InputIterator1 first1, InputIterator1 last1, 4380b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4390b57cec5SDimitry Andric 4400b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 441e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4420b57cec5SDimitry Andric merge(InputIterator1 first1, InputIterator1 last1, 4430b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4440b57cec5SDimitry Andric 4450b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 4460b57cec5SDimitry Andric void 4470b57cec5SDimitry Andric inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); 4480b57cec5SDimitry Andric 4490b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 4500b57cec5SDimitry Andric void 4510b57cec5SDimitry Andric inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp); 4520b57cec5SDimitry Andric 4530b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 4540b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4550b57cec5SDimitry Andric includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 4560b57cec5SDimitry Andric 4570b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class Compare> 4580b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4590b57cec5SDimitry Andric includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp); 4600b57cec5SDimitry Andric 4610b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 462e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4630b57cec5SDimitry Andric set_union(InputIterator1 first1, InputIterator1 last1, 4640b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4650b57cec5SDimitry Andric 4660b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 467e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4680b57cec5SDimitry Andric set_union(InputIterator1 first1, InputIterator1 last1, 4690b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4700b57cec5SDimitry Andric 4710b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 4720b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 4730b57cec5SDimitry Andric set_intersection(InputIterator1 first1, InputIterator1 last1, 4740b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4750b57cec5SDimitry Andric 4760b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 4770b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 4780b57cec5SDimitry Andric set_intersection(InputIterator1 first1, InputIterator1 last1, 4790b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4800b57cec5SDimitry Andric 4810b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 482e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4830b57cec5SDimitry Andric set_difference(InputIterator1 first1, InputIterator1 last1, 4840b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4850b57cec5SDimitry Andric 4860b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 487e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4880b57cec5SDimitry Andric set_difference(InputIterator1 first1, InputIterator1 last1, 4890b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4900b57cec5SDimitry Andric 4910b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 492e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4930b57cec5SDimitry Andric set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 4940b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4950b57cec5SDimitry Andric 4960b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 497e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4980b57cec5SDimitry Andric set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 4990b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 5000b57cec5SDimitry Andric 5010b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 502fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5030b57cec5SDimitry Andric push_heap(RandomAccessIterator first, RandomAccessIterator last); 5040b57cec5SDimitry Andric 5050b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 506fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5070b57cec5SDimitry Andric push_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5080b57cec5SDimitry Andric 5090b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 510fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5110b57cec5SDimitry Andric pop_heap(RandomAccessIterator first, RandomAccessIterator last); 5120b57cec5SDimitry Andric 5130b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 514fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5150b57cec5SDimitry Andric pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5160b57cec5SDimitry Andric 5170b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 518fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5190b57cec5SDimitry Andric make_heap(RandomAccessIterator first, RandomAccessIterator last); 5200b57cec5SDimitry Andric 5210b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 522fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5230b57cec5SDimitry Andric make_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5240b57cec5SDimitry Andric 5250b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 526fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5270b57cec5SDimitry Andric sort_heap(RandomAccessIterator first, RandomAccessIterator last); 5280b57cec5SDimitry Andric 5290b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 530fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5310b57cec5SDimitry Andric sort_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5320b57cec5SDimitry Andric 5330b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 5340b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5350b57cec5SDimitry Andric is_heap(RandomAccessIterator first, RandomAccessiterator last); 5360b57cec5SDimitry Andric 5370b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 5380b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5390b57cec5SDimitry Andric is_heap(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 5400b57cec5SDimitry Andric 5410b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 5420b57cec5SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 5430b57cec5SDimitry Andric is_heap_until(RandomAccessIterator first, RandomAccessiterator last); 5440b57cec5SDimitry Andric 5450b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 5460b57cec5SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 5470b57cec5SDimitry Andric is_heap_until(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 5480b57cec5SDimitry Andric 5490b57cec5SDimitry Andrictemplate <class ForwardIterator> 550e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 551e8d8bef9SDimitry Andric min_element(ForwardIterator first, ForwardIterator last); 5520b57cec5SDimitry Andric 5530b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 554e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 555e8d8bef9SDimitry Andric min_element(ForwardIterator first, ForwardIterator last, Compare comp); 5560b57cec5SDimitry Andric 5570b57cec5SDimitry Andrictemplate <class T> 558e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 559e8d8bef9SDimitry Andric min(const T& a, const T& b); 5600b57cec5SDimitry Andric 5610b57cec5SDimitry Andrictemplate <class T, class Compare> 562e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 563e8d8bef9SDimitry Andric min(const T& a, const T& b, Compare comp); 5640b57cec5SDimitry Andric 5650b57cec5SDimitry Andrictemplate<class T> 566e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 567e8d8bef9SDimitry Andric min(initializer_list<T> t); 5680b57cec5SDimitry Andric 5690b57cec5SDimitry Andrictemplate<class T, class Compare> 570e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 571e8d8bef9SDimitry Andric min(initializer_list<T> t, Compare comp); 5720b57cec5SDimitry Andric 5730b57cec5SDimitry Andrictemplate<class T> 5740b57cec5SDimitry Andric constexpr const T& clamp(const T& v, const T& lo, const T& hi); // C++17 5750b57cec5SDimitry Andric 5760b57cec5SDimitry Andrictemplate<class T, class Compare> 5770b57cec5SDimitry Andric constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp); // C++17 5780b57cec5SDimitry Andric 5790b57cec5SDimitry Andrictemplate <class ForwardIterator> 580e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 581e8d8bef9SDimitry Andric max_element(ForwardIterator first, ForwardIterator last); 5820b57cec5SDimitry Andric 5830b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 584e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 585e8d8bef9SDimitry Andric max_element(ForwardIterator first, ForwardIterator last, Compare comp); 5860b57cec5SDimitry Andric 5870b57cec5SDimitry Andrictemplate <class T> 588e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 589e8d8bef9SDimitry Andric max(const T& a, const T& b); 5900b57cec5SDimitry Andric 5910b57cec5SDimitry Andrictemplate <class T, class Compare> 592e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 593e8d8bef9SDimitry Andric max(const T& a, const T& b, Compare comp); 5940b57cec5SDimitry Andric 5950b57cec5SDimitry Andrictemplate<class T> 596e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 597e8d8bef9SDimitry Andric max(initializer_list<T> t); 5980b57cec5SDimitry Andric 5990b57cec5SDimitry Andrictemplate<class T, class Compare> 600e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 601e8d8bef9SDimitry Andric max(initializer_list<T> t, Compare comp); 6020b57cec5SDimitry Andric 6030b57cec5SDimitry Andrictemplate<class ForwardIterator> 604e8d8bef9SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 605e8d8bef9SDimitry Andric minmax_element(ForwardIterator first, ForwardIterator last); 6060b57cec5SDimitry Andric 6070b57cec5SDimitry Andrictemplate<class ForwardIterator, class Compare> 608e8d8bef9SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 609e8d8bef9SDimitry Andric minmax_element(ForwardIterator first, ForwardIterator last, Compare comp); 6100b57cec5SDimitry Andric 6110b57cec5SDimitry Andrictemplate<class T> 612e8d8bef9SDimitry Andric constexpr pair<const T&, const T&> // constexpr in C++14 613e8d8bef9SDimitry Andric minmax(const T& a, const T& b); 6140b57cec5SDimitry Andric 6150b57cec5SDimitry Andrictemplate<class T, class Compare> 616e8d8bef9SDimitry Andric constexpr pair<const T&, const T&> // constexpr in C++14 617e8d8bef9SDimitry Andric minmax(const T& a, const T& b, Compare comp); 6180b57cec5SDimitry Andric 6190b57cec5SDimitry Andrictemplate<class T> 620e8d8bef9SDimitry Andric constexpr pair<T, T> // constexpr in C++14 621e8d8bef9SDimitry Andric minmax(initializer_list<T> t); 6220b57cec5SDimitry Andric 6230b57cec5SDimitry Andrictemplate<class T, class Compare> 624e8d8bef9SDimitry Andric constexpr pair<T, T> // constexpr in C++14 625e8d8bef9SDimitry Andric minmax(initializer_list<T> t, Compare comp); 6260b57cec5SDimitry Andric 6270b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 6280b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6290b57cec5SDimitry Andric lexicographical_compare(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 6300b57cec5SDimitry Andric 6310b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class Compare> 6320b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6330b57cec5SDimitry Andric lexicographical_compare(InputIterator1 first1, InputIterator1 last1, 6340b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, Compare comp); 6350b57cec5SDimitry Andric 6360b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 637e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6380b57cec5SDimitry Andric next_permutation(BidirectionalIterator first, BidirectionalIterator last); 6390b57cec5SDimitry Andric 6400b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 641e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6420b57cec5SDimitry Andric next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 6430b57cec5SDimitry Andric 6440b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 645e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6460b57cec5SDimitry Andric prev_permutation(BidirectionalIterator first, BidirectionalIterator last); 6470b57cec5SDimitry Andric 6480b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 649e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6500b57cec5SDimitry Andric prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 6510b57cec5SDimitry Andric 65204eeddc0SDimitry Andricnamespace ranges { 65304eeddc0SDimitry Andric// [algorithms.results], algorithm result types 65404eeddc0SDimitry Andrictemplate<class InputIterator, class OutputIterator> 65504eeddc0SDimitry Andric struct in_out_result; 65604eeddc0SDimitry Andric} 65704eeddc0SDimitry Andric 6580b57cec5SDimitry Andric} // std 6590b57cec5SDimitry Andric 6600b57cec5SDimitry Andric*/ 6610b57cec5SDimitry Andric 66204eeddc0SDimitry Andric#include <__bits> // __libcpp_clz 6630b57cec5SDimitry Andric#include <__config> 664fe6060f1SDimitry Andric#include <__debug> 665fe6060f1SDimitry Andric#include <cstddef> 6660b57cec5SDimitry Andric#include <cstring> 667fe6060f1SDimitry Andric#include <functional> 668fe6060f1SDimitry Andric#include <initializer_list> 6690b57cec5SDimitry Andric#include <iterator> 670fe6060f1SDimitry Andric#include <memory> 671fe6060f1SDimitry Andric#include <type_traits> 672fe6060f1SDimitry Andric#include <utility> // swap_ranges 6730b57cec5SDimitry Andric#include <version> 6740b57cec5SDimitry Andric 675fe6060f1SDimitry Andric#include <__algorithm/adjacent_find.h> 676fe6060f1SDimitry Andric#include <__algorithm/all_of.h> 677fe6060f1SDimitry Andric#include <__algorithm/any_of.h> 678fe6060f1SDimitry Andric#include <__algorithm/binary_search.h> 679fe6060f1SDimitry Andric#include <__algorithm/clamp.h> 680fe6060f1SDimitry Andric#include <__algorithm/comp.h> 681fe6060f1SDimitry Andric#include <__algorithm/comp_ref_type.h> 682fe6060f1SDimitry Andric#include <__algorithm/copy.h> 683fe6060f1SDimitry Andric#include <__algorithm/copy_backward.h> 684fe6060f1SDimitry Andric#include <__algorithm/copy_if.h> 685fe6060f1SDimitry Andric#include <__algorithm/copy_n.h> 686fe6060f1SDimitry Andric#include <__algorithm/count.h> 687fe6060f1SDimitry Andric#include <__algorithm/count_if.h> 688fe6060f1SDimitry Andric#include <__algorithm/equal.h> 689fe6060f1SDimitry Andric#include <__algorithm/equal_range.h> 690fe6060f1SDimitry Andric#include <__algorithm/fill.h> 69104eeddc0SDimitry Andric#include <__algorithm/fill_n.h> 692fe6060f1SDimitry Andric#include <__algorithm/find.h> 693fe6060f1SDimitry Andric#include <__algorithm/find_end.h> 694fe6060f1SDimitry Andric#include <__algorithm/find_first_of.h> 695fe6060f1SDimitry Andric#include <__algorithm/find_if.h> 696fe6060f1SDimitry Andric#include <__algorithm/find_if_not.h> 697fe6060f1SDimitry Andric#include <__algorithm/for_each.h> 698fe6060f1SDimitry Andric#include <__algorithm/for_each_n.h> 699fe6060f1SDimitry Andric#include <__algorithm/generate.h> 70004eeddc0SDimitry Andric#include <__algorithm/generate_n.h> 701fe6060f1SDimitry Andric#include <__algorithm/half_positive.h> 702*1fd87a68SDimitry Andric#include <__algorithm/in_in_out_result.h> 70304eeddc0SDimitry Andric#include <__algorithm/in_in_result.h> 70404eeddc0SDimitry Andric#include <__algorithm/in_out_result.h> 705fe6060f1SDimitry Andric#include <__algorithm/includes.h> 706fe6060f1SDimitry Andric#include <__algorithm/inplace_merge.h> 707fe6060f1SDimitry Andric#include <__algorithm/is_heap.h> 708fe6060f1SDimitry Andric#include <__algorithm/is_heap_until.h> 709fe6060f1SDimitry Andric#include <__algorithm/is_partitioned.h> 710fe6060f1SDimitry Andric#include <__algorithm/is_permutation.h> 711fe6060f1SDimitry Andric#include <__algorithm/is_sorted.h> 712fe6060f1SDimitry Andric#include <__algorithm/is_sorted_until.h> 713fe6060f1SDimitry Andric#include <__algorithm/iter_swap.h> 714fe6060f1SDimitry Andric#include <__algorithm/lexicographical_compare.h> 715fe6060f1SDimitry Andric#include <__algorithm/lower_bound.h> 716fe6060f1SDimitry Andric#include <__algorithm/make_heap.h> 717fe6060f1SDimitry Andric#include <__algorithm/max.h> 718fe6060f1SDimitry Andric#include <__algorithm/max_element.h> 719fe6060f1SDimitry Andric#include <__algorithm/merge.h> 720fe6060f1SDimitry Andric#include <__algorithm/min.h> 721fe6060f1SDimitry Andric#include <__algorithm/min_element.h> 722fe6060f1SDimitry Andric#include <__algorithm/minmax.h> 723fe6060f1SDimitry Andric#include <__algorithm/minmax_element.h> 724fe6060f1SDimitry Andric#include <__algorithm/mismatch.h> 725fe6060f1SDimitry Andric#include <__algorithm/move.h> 726fe6060f1SDimitry Andric#include <__algorithm/move_backward.h> 727fe6060f1SDimitry Andric#include <__algorithm/next_permutation.h> 728fe6060f1SDimitry Andric#include <__algorithm/none_of.h> 729fe6060f1SDimitry Andric#include <__algorithm/nth_element.h> 730fe6060f1SDimitry Andric#include <__algorithm/partial_sort.h> 731fe6060f1SDimitry Andric#include <__algorithm/partial_sort_copy.h> 732fe6060f1SDimitry Andric#include <__algorithm/partition.h> 733fe6060f1SDimitry Andric#include <__algorithm/partition_copy.h> 734fe6060f1SDimitry Andric#include <__algorithm/partition_point.h> 735fe6060f1SDimitry Andric#include <__algorithm/pop_heap.h> 736fe6060f1SDimitry Andric#include <__algorithm/prev_permutation.h> 737fe6060f1SDimitry Andric#include <__algorithm/push_heap.h> 738fe6060f1SDimitry Andric#include <__algorithm/remove.h> 739fe6060f1SDimitry Andric#include <__algorithm/remove_copy.h> 740fe6060f1SDimitry Andric#include <__algorithm/remove_copy_if.h> 741fe6060f1SDimitry Andric#include <__algorithm/remove_if.h> 742fe6060f1SDimitry Andric#include <__algorithm/replace.h> 743fe6060f1SDimitry Andric#include <__algorithm/replace_copy.h> 744fe6060f1SDimitry Andric#include <__algorithm/replace_copy_if.h> 745fe6060f1SDimitry Andric#include <__algorithm/replace_if.h> 746fe6060f1SDimitry Andric#include <__algorithm/reverse.h> 747fe6060f1SDimitry Andric#include <__algorithm/reverse_copy.h> 748fe6060f1SDimitry Andric#include <__algorithm/rotate.h> 749fe6060f1SDimitry Andric#include <__algorithm/rotate_copy.h> 750fe6060f1SDimitry Andric#include <__algorithm/sample.h> 751fe6060f1SDimitry Andric#include <__algorithm/search.h> 752fe6060f1SDimitry Andric#include <__algorithm/search_n.h> 753fe6060f1SDimitry Andric#include <__algorithm/set_difference.h> 754fe6060f1SDimitry Andric#include <__algorithm/set_intersection.h> 755fe6060f1SDimitry Andric#include <__algorithm/set_symmetric_difference.h> 756fe6060f1SDimitry Andric#include <__algorithm/set_union.h> 757fe6060f1SDimitry Andric#include <__algorithm/shift_left.h> 758fe6060f1SDimitry Andric#include <__algorithm/shift_right.h> 759fe6060f1SDimitry Andric#include <__algorithm/shuffle.h> 760fe6060f1SDimitry Andric#include <__algorithm/sift_down.h> 761fe6060f1SDimitry Andric#include <__algorithm/sort.h> 762fe6060f1SDimitry Andric#include <__algorithm/sort_heap.h> 763fe6060f1SDimitry Andric#include <__algorithm/stable_partition.h> 764fe6060f1SDimitry Andric#include <__algorithm/stable_sort.h> 765fe6060f1SDimitry Andric#include <__algorithm/swap_ranges.h> 766fe6060f1SDimitry Andric#include <__algorithm/transform.h> 767fe6060f1SDimitry Andric#include <__algorithm/unique.h> 76804eeddc0SDimitry Andric#include <__algorithm/unique_copy.h> 769fe6060f1SDimitry Andric#include <__algorithm/unwrap_iter.h> 770fe6060f1SDimitry Andric#include <__algorithm/upper_bound.h> 7710b57cec5SDimitry Andric 7720b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 7730b57cec5SDimitry Andric#pragma GCC system_header 7740b57cec5SDimitry Andric#endif 7750b57cec5SDimitry Andric 776e40139ffSDimitry Andric#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) && _LIBCPP_STD_VER >= 17 777e40139ffSDimitry Andric# include <__pstl_algorithm> 778e40139ffSDimitry Andric#endif 779e40139ffSDimitry Andric 7800b57cec5SDimitry Andric#endif // _LIBCPP_ALGORITHM 781