10b57cec5SDimitry Andric// -*- C++ -*- 2*349cc55cSDimitry 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 210b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 220b57cec5SDimitry Andric constexpr bool // constexpr in C++20 230b57cec5SDimitry Andric all_of(InputIterator first, InputIterator last, Predicate pred); 240b57cec5SDimitry Andric 250b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 260b57cec5SDimitry Andric constexpr bool // constexpr in C++20 270b57cec5SDimitry Andric any_of(InputIterator first, InputIterator last, Predicate pred); 280b57cec5SDimitry Andric 290b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 300b57cec5SDimitry Andric constexpr bool // constexpr in C++20 310b57cec5SDimitry Andric none_of(InputIterator first, InputIterator last, Predicate pred); 320b57cec5SDimitry Andric 330b57cec5SDimitry Andrictemplate <class InputIterator, class Function> 340b57cec5SDimitry Andric constexpr Function // constexpr in C++20 350b57cec5SDimitry Andric for_each(InputIterator first, InputIterator last, Function f); 360b57cec5SDimitry Andric 370b57cec5SDimitry Andrictemplate<class InputIterator, class Size, class Function> 380b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 390b57cec5SDimitry Andric for_each_n(InputIterator first, Size n, Function f); // C++17 400b57cec5SDimitry Andric 410b57cec5SDimitry Andrictemplate <class InputIterator, class T> 420b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 430b57cec5SDimitry Andric find(InputIterator first, InputIterator last, const T& value); 440b57cec5SDimitry Andric 450b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 460b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 470b57cec5SDimitry Andric find_if(InputIterator first, InputIterator last, Predicate pred); 480b57cec5SDimitry Andric 490b57cec5SDimitry Andrictemplate<class InputIterator, class Predicate> 50e8d8bef9SDimitry Andric constexpr InputIterator // constexpr in C++20 510b57cec5SDimitry Andric find_if_not(InputIterator first, InputIterator last, Predicate pred); 520b57cec5SDimitry Andric 530b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 54e8d8bef9SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 550b57cec5SDimitry Andric find_end(ForwardIterator1 first1, ForwardIterator1 last1, 560b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 570b57cec5SDimitry Andric 580b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 59e8d8bef9SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 600b57cec5SDimitry Andric find_end(ForwardIterator1 first1, ForwardIterator1 last1, 610b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 620b57cec5SDimitry Andric 630b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 640b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 650b57cec5SDimitry Andric find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 660b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 670b57cec5SDimitry Andric 680b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 690b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 700b57cec5SDimitry Andric find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 710b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 720b57cec5SDimitry Andric 730b57cec5SDimitry Andrictemplate <class ForwardIterator> 740b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 750b57cec5SDimitry Andric adjacent_find(ForwardIterator first, ForwardIterator last); 760b57cec5SDimitry Andric 770b57cec5SDimitry Andrictemplate <class ForwardIterator, class BinaryPredicate> 780b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 790b57cec5SDimitry Andric adjacent_find(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 800b57cec5SDimitry Andric 810b57cec5SDimitry Andrictemplate <class InputIterator, class T> 820b57cec5SDimitry Andric constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 830b57cec5SDimitry Andric count(InputIterator first, InputIterator last, const T& value); 840b57cec5SDimitry Andric 850b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 860b57cec5SDimitry Andric constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 870b57cec5SDimitry Andric count_if(InputIterator first, InputIterator last, Predicate pred); 880b57cec5SDimitry Andric 890b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 900b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 910b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 920b57cec5SDimitry Andric 930b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 940b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 950b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 960b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2); // **C++14** 970b57cec5SDimitry Andric 980b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 990b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1000b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 1010b57cec5SDimitry Andric InputIterator2 first2, BinaryPredicate pred); 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, InputIterator2 last2, 1070b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 1080b57cec5SDimitry Andric 1090b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 1100b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1110b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 1120b57cec5SDimitry Andric 1130b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 1140b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1150b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 1160b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2); // **C++14** 1170b57cec5SDimitry Andric 1180b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1190b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1200b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 1210b57cec5SDimitry Andric InputIterator2 first2, BinaryPredicate pred); 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, InputIterator2 last2, 1270b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 1280b57cec5SDimitry Andric 1290b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2> 1300b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1310b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1320b57cec5SDimitry Andric ForwardIterator2 first2); 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, ForwardIterator2 last2); // **C++14** 1380b57cec5SDimitry Andric 1390b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1400b57cec5SDimitry Andric constexpr bool // constexpr in C++20 1410b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1420b57cec5SDimitry Andric ForwardIterator2 first2, BinaryPredicate pred); 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, ForwardIterator2 last2, 1480b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 1490b57cec5SDimitry Andric 1500b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 1510b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 1520b57cec5SDimitry Andric search(ForwardIterator1 first1, ForwardIterator1 last1, 1530b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 1540b57cec5SDimitry Andric 1550b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1560b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 1570b57cec5SDimitry Andric search(ForwardIterator1 first1, ForwardIterator1 last1, 1580b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 1590b57cec5SDimitry Andric 1600b57cec5SDimitry Andrictemplate <class ForwardIterator, class Size, class T> 1610b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 1620b57cec5SDimitry Andric search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value); 1630b57cec5SDimitry Andric 1640b57cec5SDimitry Andrictemplate <class ForwardIterator, class Size, class T, class BinaryPredicate> 1650b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 1660b57cec5SDimitry Andric search_n(ForwardIterator first, ForwardIterator last, 1670b57cec5SDimitry Andric Size count, const T& value, BinaryPredicate pred); 1680b57cec5SDimitry Andric 1690b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator> 170480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 1710b57cec5SDimitry Andric copy(InputIterator first, InputIterator last, OutputIterator result); 1720b57cec5SDimitry Andric 1730b57cec5SDimitry Andrictemplate<class InputIterator, class OutputIterator, class Predicate> 174480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 1750b57cec5SDimitry Andric copy_if(InputIterator first, InputIterator last, 1760b57cec5SDimitry Andric OutputIterator result, Predicate pred); 1770b57cec5SDimitry Andric 1780b57cec5SDimitry Andrictemplate<class InputIterator, class Size, class OutputIterator> 179480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 1800b57cec5SDimitry Andric copy_n(InputIterator first, Size n, OutputIterator result); 1810b57cec5SDimitry Andric 1820b57cec5SDimitry Andrictemplate <class BidirectionalIterator1, class BidirectionalIterator2> 183480093f4SDimitry Andric constexpr BidirectionalIterator2 // constexpr in C++20 1840b57cec5SDimitry Andric copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 1850b57cec5SDimitry Andric BidirectionalIterator2 result); 1860b57cec5SDimitry Andric 1870b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 188e8d8bef9SDimitry Andric constexpr ForwardIterator2 // constexpr in C++20 1890b57cec5SDimitry Andric swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2); 1900b57cec5SDimitry Andric 1910b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 192e8d8bef9SDimitry Andric constexpr void // constexpr in C++20 1930b57cec5SDimitry Andric iter_swap(ForwardIterator1 a, ForwardIterator2 b); 1940b57cec5SDimitry Andric 1950b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class UnaryOperation> 1960b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 1970b57cec5SDimitry Andric transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op); 1980b57cec5SDimitry Andric 1990b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation> 2000b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2010b57cec5SDimitry Andric transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 2020b57cec5SDimitry Andric OutputIterator result, BinaryOperation binary_op); 2030b57cec5SDimitry Andric 2040b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 2050b57cec5SDimitry Andric constexpr void // constexpr in C++20 2060b57cec5SDimitry Andric replace(ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value); 2070b57cec5SDimitry Andric 2080b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate, class T> 2090b57cec5SDimitry Andric constexpr void // constexpr in C++20 2100b57cec5SDimitry Andric replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, const T& new_value); 2110b57cec5SDimitry Andric 2120b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class T> 2130b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2140b57cec5SDimitry Andric replace_copy(InputIterator first, InputIterator last, OutputIterator result, 2150b57cec5SDimitry Andric const T& old_value, const T& new_value); 2160b57cec5SDimitry Andric 2170b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class Predicate, class T> 2180b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2190b57cec5SDimitry Andric replace_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value); 2200b57cec5SDimitry Andric 2210b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 2220b57cec5SDimitry Andric constexpr void // constexpr in C++20 2230b57cec5SDimitry Andric fill(ForwardIterator first, ForwardIterator last, const T& value); 2240b57cec5SDimitry Andric 2250b57cec5SDimitry Andrictemplate <class OutputIterator, class Size, class T> 2260b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2270b57cec5SDimitry Andric fill_n(OutputIterator first, Size n, const T& value); 2280b57cec5SDimitry Andric 2290b57cec5SDimitry Andrictemplate <class ForwardIterator, class Generator> 2300b57cec5SDimitry Andric constexpr void // constexpr in C++20 2310b57cec5SDimitry Andric generate(ForwardIterator first, ForwardIterator last, Generator gen); 2320b57cec5SDimitry Andric 2330b57cec5SDimitry Andrictemplate <class OutputIterator, class Size, class Generator> 2340b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2350b57cec5SDimitry Andric generate_n(OutputIterator first, Size n, Generator gen); 2360b57cec5SDimitry Andric 2370b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 2380b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2390b57cec5SDimitry Andric remove(ForwardIterator first, ForwardIterator last, const T& value); 2400b57cec5SDimitry Andric 2410b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 2420b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2430b57cec5SDimitry Andric remove_if(ForwardIterator first, ForwardIterator last, Predicate pred); 2440b57cec5SDimitry Andric 2450b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class T> 2460b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2470b57cec5SDimitry Andric remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value); 2480b57cec5SDimitry Andric 2490b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class Predicate> 2500b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2510b57cec5SDimitry Andric remove_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred); 2520b57cec5SDimitry Andric 2530b57cec5SDimitry Andrictemplate <class ForwardIterator> 254e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2550b57cec5SDimitry Andric unique(ForwardIterator first, ForwardIterator last); 2560b57cec5SDimitry Andric 2570b57cec5SDimitry Andrictemplate <class ForwardIterator, class BinaryPredicate> 258e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2590b57cec5SDimitry Andric unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 2600b57cec5SDimitry Andric 2610b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator> 262e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 2630b57cec5SDimitry Andric unique_copy(InputIterator first, InputIterator last, OutputIterator result); 2640b57cec5SDimitry Andric 2650b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class BinaryPredicate> 266e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 2670b57cec5SDimitry Andric unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred); 2680b57cec5SDimitry Andric 2690b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 270e8d8bef9SDimitry Andric constexpr void // constexpr in C++20 2710b57cec5SDimitry Andric reverse(BidirectionalIterator first, BidirectionalIterator last); 2720b57cec5SDimitry Andric 2730b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class OutputIterator> 2740b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 2750b57cec5SDimitry Andric reverse_copy(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result); 2760b57cec5SDimitry Andric 2770b57cec5SDimitry Andrictemplate <class ForwardIterator> 278e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 2790b57cec5SDimitry Andric rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last); 2800b57cec5SDimitry Andric 2810b57cec5SDimitry Andrictemplate <class ForwardIterator, class OutputIterator> 282e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 2830b57cec5SDimitry Andric rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result); 2840b57cec5SDimitry Andric 2850b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 2860b57cec5SDimitry Andric void 2870b57cec5SDimitry Andric random_shuffle(RandomAccessIterator first, RandomAccessIterator last); // deprecated in C++14, removed in C++17 2880b57cec5SDimitry Andric 2890b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class RandomNumberGenerator> 2900b57cec5SDimitry Andric void 2910b57cec5SDimitry Andric random_shuffle(RandomAccessIterator first, RandomAccessIterator last, 2920b57cec5SDimitry Andric RandomNumberGenerator& rand); // deprecated in C++14, removed in C++17 2930b57cec5SDimitry Andric 2940b57cec5SDimitry Andrictemplate<class PopulationIterator, class SampleIterator, 2950b57cec5SDimitry Andric class Distance, class UniformRandomBitGenerator> 2960b57cec5SDimitry Andric SampleIterator sample(PopulationIterator first, PopulationIterator last, 2970b57cec5SDimitry Andric SampleIterator out, Distance n, 2980b57cec5SDimitry Andric UniformRandomBitGenerator&& g); // C++17 2990b57cec5SDimitry Andric 3000b57cec5SDimitry Andrictemplate<class RandomAccessIterator, class UniformRandomNumberGenerator> 3010b57cec5SDimitry Andric void shuffle(RandomAccessIterator first, RandomAccessIterator last, 3020b57cec5SDimitry Andric UniformRandomNumberGenerator&& g); 3030b57cec5SDimitry Andric 304e8d8bef9SDimitry Andrictemplate<class ForwardIterator> 305e8d8bef9SDimitry Andric constexpr ForwardIterator 306e8d8bef9SDimitry Andric shift_left(ForwardIterator first, ForwardIterator last, 307e8d8bef9SDimitry Andric typename iterator_traits<ForwardIterator>::difference_type n); // C++20 308e8d8bef9SDimitry Andric 309e8d8bef9SDimitry Andrictemplate<class ForwardIterator> 310e8d8bef9SDimitry Andric constexpr ForwardIterator 311e8d8bef9SDimitry Andric shift_right(ForwardIterator first, ForwardIterator last, 312e8d8bef9SDimitry Andric typename iterator_traits<ForwardIterator>::difference_type n); // C++20 313e8d8bef9SDimitry Andric 3140b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 3150b57cec5SDimitry Andric constexpr bool // constexpr in C++20 3160b57cec5SDimitry Andric is_partitioned(InputIterator first, InputIterator last, Predicate pred); 3170b57cec5SDimitry Andric 3180b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 319e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3200b57cec5SDimitry Andric partition(ForwardIterator first, ForwardIterator last, Predicate pred); 3210b57cec5SDimitry Andric 3220b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator1, 3230b57cec5SDimitry Andric class OutputIterator2, class Predicate> 3240b57cec5SDimitry Andric constexpr pair<OutputIterator1, OutputIterator2> // constexpr in C++20 3250b57cec5SDimitry Andric partition_copy(InputIterator first, InputIterator last, 3260b57cec5SDimitry Andric OutputIterator1 out_true, OutputIterator2 out_false, 3270b57cec5SDimitry Andric Predicate pred); 3280b57cec5SDimitry Andric 3290b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 3300b57cec5SDimitry Andric ForwardIterator 3310b57cec5SDimitry Andric stable_partition(ForwardIterator first, ForwardIterator last, Predicate pred); 3320b57cec5SDimitry Andric 3330b57cec5SDimitry Andrictemplate<class ForwardIterator, class Predicate> 3340b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3350b57cec5SDimitry Andric partition_point(ForwardIterator first, ForwardIterator last, Predicate pred); 3360b57cec5SDimitry Andric 3370b57cec5SDimitry Andrictemplate <class ForwardIterator> 3380b57cec5SDimitry Andric constexpr bool // constexpr in C++20 3390b57cec5SDimitry Andric is_sorted(ForwardIterator first, ForwardIterator last); 3400b57cec5SDimitry Andric 3410b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 342e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 3430b57cec5SDimitry Andric is_sorted(ForwardIterator first, ForwardIterator last, Compare comp); 3440b57cec5SDimitry Andric 3450b57cec5SDimitry Andrictemplate<class ForwardIterator> 3460b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3470b57cec5SDimitry Andric is_sorted_until(ForwardIterator first, ForwardIterator last); 3480b57cec5SDimitry Andric 3490b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 3500b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3510b57cec5SDimitry Andric is_sorted_until(ForwardIterator first, ForwardIterator last, Compare comp); 3520b57cec5SDimitry Andric 3530b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 354fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3550b57cec5SDimitry Andric sort(RandomAccessIterator first, RandomAccessIterator last); 3560b57cec5SDimitry Andric 3570b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 358fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3590b57cec5SDimitry Andric sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 3600b57cec5SDimitry Andric 3610b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 3620b57cec5SDimitry Andric void 3630b57cec5SDimitry Andric stable_sort(RandomAccessIterator first, RandomAccessIterator last); 3640b57cec5SDimitry Andric 3650b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 3660b57cec5SDimitry Andric void 3670b57cec5SDimitry Andric stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 3680b57cec5SDimitry Andric 3690b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 370fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3710b57cec5SDimitry Andric partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last); 3720b57cec5SDimitry Andric 3730b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 374fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3750b57cec5SDimitry Andric partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp); 3760b57cec5SDimitry Andric 3770b57cec5SDimitry Andrictemplate <class InputIterator, class RandomAccessIterator> 378fe6060f1SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 3790b57cec5SDimitry Andric partial_sort_copy(InputIterator first, InputIterator last, 3800b57cec5SDimitry Andric RandomAccessIterator result_first, RandomAccessIterator result_last); 3810b57cec5SDimitry Andric 3820b57cec5SDimitry Andrictemplate <class InputIterator, class RandomAccessIterator, class Compare> 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, Compare comp); 3860b57cec5SDimitry Andric 3870b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 388fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3890b57cec5SDimitry Andric nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last); 3900b57cec5SDimitry Andric 3910b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 392fe6060f1SDimitry Andric constexpr void // constexpr in C++20 3930b57cec5SDimitry Andric nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp); 3940b57cec5SDimitry Andric 3950b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 3960b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 3970b57cec5SDimitry Andric lower_bound(ForwardIterator first, ForwardIterator last, const T& value); 3980b57cec5SDimitry Andric 3990b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4000b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4010b57cec5SDimitry Andric lower_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4020b57cec5SDimitry Andric 4030b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4040b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 4050b57cec5SDimitry Andric upper_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 upper_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4100b57cec5SDimitry Andric 4110b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4120b57cec5SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 4130b57cec5SDimitry Andric equal_range(ForwardIterator first, ForwardIterator last, const T& value); 4140b57cec5SDimitry Andric 4150b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4160b57cec5SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 4170b57cec5SDimitry Andric equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4180b57cec5SDimitry Andric 4190b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 4200b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4210b57cec5SDimitry Andric binary_search(ForwardIterator first, ForwardIterator last, const T& value); 4220b57cec5SDimitry Andric 4230b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 4240b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4250b57cec5SDimitry Andric binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 4260b57cec5SDimitry Andric 4270b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 428e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4290b57cec5SDimitry Andric merge(InputIterator1 first1, InputIterator1 last1, 4300b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4310b57cec5SDimitry Andric 4320b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 433e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4340b57cec5SDimitry Andric merge(InputIterator1 first1, InputIterator1 last1, 4350b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4360b57cec5SDimitry Andric 4370b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 4380b57cec5SDimitry Andric void 4390b57cec5SDimitry Andric inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); 4400b57cec5SDimitry Andric 4410b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 4420b57cec5SDimitry Andric void 4430b57cec5SDimitry Andric inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp); 4440b57cec5SDimitry Andric 4450b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 4460b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4470b57cec5SDimitry Andric includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 4480b57cec5SDimitry Andric 4490b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class Compare> 4500b57cec5SDimitry Andric constexpr bool // constexpr in C++20 4510b57cec5SDimitry Andric includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp); 4520b57cec5SDimitry Andric 4530b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 454e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4550b57cec5SDimitry Andric set_union(InputIterator1 first1, InputIterator1 last1, 4560b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4570b57cec5SDimitry Andric 4580b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 459e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4600b57cec5SDimitry Andric set_union(InputIterator1 first1, InputIterator1 last1, 4610b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4620b57cec5SDimitry Andric 4630b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 4640b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 4650b57cec5SDimitry Andric set_intersection(InputIterator1 first1, InputIterator1 last1, 4660b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4670b57cec5SDimitry Andric 4680b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 4690b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 4700b57cec5SDimitry Andric set_intersection(InputIterator1 first1, InputIterator1 last1, 4710b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4720b57cec5SDimitry Andric 4730b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 474e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4750b57cec5SDimitry Andric set_difference(InputIterator1 first1, InputIterator1 last1, 4760b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4770b57cec5SDimitry Andric 4780b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 479e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4800b57cec5SDimitry Andric set_difference(InputIterator1 first1, InputIterator1 last1, 4810b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 4820b57cec5SDimitry Andric 4830b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 484e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 4850b57cec5SDimitry Andric set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 4860b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 4870b57cec5SDimitry Andric 4880b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 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, Compare comp); 4920b57cec5SDimitry Andric 4930b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 494fe6060f1SDimitry Andric constexpr void // constexpr in C++20 4950b57cec5SDimitry Andric push_heap(RandomAccessIterator first, RandomAccessIterator last); 4960b57cec5SDimitry Andric 4970b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 498fe6060f1SDimitry Andric constexpr void // constexpr in C++20 4990b57cec5SDimitry Andric push_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5000b57cec5SDimitry Andric 5010b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 502fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5030b57cec5SDimitry Andric pop_heap(RandomAccessIterator first, RandomAccessIterator last); 5040b57cec5SDimitry Andric 5050b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 506fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5070b57cec5SDimitry Andric pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5080b57cec5SDimitry Andric 5090b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 510fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5110b57cec5SDimitry Andric make_heap(RandomAccessIterator first, RandomAccessIterator last); 5120b57cec5SDimitry Andric 5130b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 514fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5150b57cec5SDimitry Andric make_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5160b57cec5SDimitry Andric 5170b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 518fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5190b57cec5SDimitry Andric sort_heap(RandomAccessIterator first, RandomAccessIterator last); 5200b57cec5SDimitry Andric 5210b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 522fe6060f1SDimitry Andric constexpr void // constexpr in C++20 5230b57cec5SDimitry Andric sort_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 5240b57cec5SDimitry Andric 5250b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 5260b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5270b57cec5SDimitry Andric is_heap(RandomAccessIterator first, RandomAccessiterator last); 5280b57cec5SDimitry Andric 5290b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 5300b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5310b57cec5SDimitry Andric is_heap(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 5320b57cec5SDimitry Andric 5330b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 5340b57cec5SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 5350b57cec5SDimitry Andric is_heap_until(RandomAccessIterator first, RandomAccessiterator last); 5360b57cec5SDimitry Andric 5370b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 5380b57cec5SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 5390b57cec5SDimitry Andric is_heap_until(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 5400b57cec5SDimitry Andric 5410b57cec5SDimitry Andrictemplate <class ForwardIterator> 542e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 543e8d8bef9SDimitry Andric min_element(ForwardIterator first, ForwardIterator last); 5440b57cec5SDimitry Andric 5450b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 546e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 547e8d8bef9SDimitry Andric min_element(ForwardIterator first, ForwardIterator last, Compare comp); 5480b57cec5SDimitry Andric 5490b57cec5SDimitry Andrictemplate <class T> 550e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 551e8d8bef9SDimitry Andric min(const T& a, const T& b); 5520b57cec5SDimitry Andric 5530b57cec5SDimitry Andrictemplate <class T, class Compare> 554e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 555e8d8bef9SDimitry Andric min(const T& a, const T& b, Compare comp); 5560b57cec5SDimitry Andric 5570b57cec5SDimitry Andrictemplate<class T> 558e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 559e8d8bef9SDimitry Andric min(initializer_list<T> t); 5600b57cec5SDimitry Andric 5610b57cec5SDimitry Andrictemplate<class T, class Compare> 562e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 563e8d8bef9SDimitry Andric min(initializer_list<T> t, Compare comp); 5640b57cec5SDimitry Andric 5650b57cec5SDimitry Andrictemplate<class T> 5660b57cec5SDimitry Andric constexpr const T& clamp(const T& v, const T& lo, const T& hi); // C++17 5670b57cec5SDimitry Andric 5680b57cec5SDimitry Andrictemplate<class T, class Compare> 5690b57cec5SDimitry Andric constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp); // C++17 5700b57cec5SDimitry Andric 5710b57cec5SDimitry Andrictemplate <class ForwardIterator> 572e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 573e8d8bef9SDimitry Andric max_element(ForwardIterator first, ForwardIterator last); 5740b57cec5SDimitry Andric 5750b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 576e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 577e8d8bef9SDimitry Andric max_element(ForwardIterator first, ForwardIterator last, Compare comp); 5780b57cec5SDimitry Andric 5790b57cec5SDimitry Andrictemplate <class T> 580e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 581e8d8bef9SDimitry Andric max(const T& a, const T& b); 5820b57cec5SDimitry Andric 5830b57cec5SDimitry Andrictemplate <class T, class Compare> 584e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 585e8d8bef9SDimitry Andric max(const T& a, const T& b, Compare comp); 5860b57cec5SDimitry Andric 5870b57cec5SDimitry Andrictemplate<class T> 588e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 589e8d8bef9SDimitry Andric max(initializer_list<T> t); 5900b57cec5SDimitry Andric 5910b57cec5SDimitry Andrictemplate<class T, class Compare> 592e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 593e8d8bef9SDimitry Andric max(initializer_list<T> t, Compare comp); 5940b57cec5SDimitry Andric 5950b57cec5SDimitry Andrictemplate<class ForwardIterator> 596e8d8bef9SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 597e8d8bef9SDimitry Andric minmax_element(ForwardIterator first, ForwardIterator last); 5980b57cec5SDimitry Andric 5990b57cec5SDimitry Andrictemplate<class ForwardIterator, class Compare> 600e8d8bef9SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 601e8d8bef9SDimitry Andric minmax_element(ForwardIterator first, ForwardIterator last, Compare comp); 6020b57cec5SDimitry Andric 6030b57cec5SDimitry Andrictemplate<class T> 604e8d8bef9SDimitry Andric constexpr pair<const T&, const T&> // constexpr in C++14 605e8d8bef9SDimitry Andric minmax(const T& a, const T& b); 6060b57cec5SDimitry Andric 6070b57cec5SDimitry Andrictemplate<class T, class Compare> 608e8d8bef9SDimitry Andric constexpr pair<const T&, const T&> // constexpr in C++14 609e8d8bef9SDimitry Andric minmax(const T& a, const T& b, Compare comp); 6100b57cec5SDimitry Andric 6110b57cec5SDimitry Andrictemplate<class T> 612e8d8bef9SDimitry Andric constexpr pair<T, T> // constexpr in C++14 613e8d8bef9SDimitry Andric minmax(initializer_list<T> t); 6140b57cec5SDimitry Andric 6150b57cec5SDimitry Andrictemplate<class T, class Compare> 616e8d8bef9SDimitry Andric constexpr pair<T, T> // constexpr in C++14 617e8d8bef9SDimitry Andric minmax(initializer_list<T> t, Compare comp); 6180b57cec5SDimitry Andric 6190b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 6200b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6210b57cec5SDimitry Andric lexicographical_compare(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 6220b57cec5SDimitry Andric 6230b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class Compare> 6240b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6250b57cec5SDimitry Andric lexicographical_compare(InputIterator1 first1, InputIterator1 last1, 6260b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, Compare comp); 6270b57cec5SDimitry Andric 6280b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 629e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6300b57cec5SDimitry Andric next_permutation(BidirectionalIterator first, BidirectionalIterator last); 6310b57cec5SDimitry Andric 6320b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 633e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6340b57cec5SDimitry Andric next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 6350b57cec5SDimitry Andric 6360b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 637e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6380b57cec5SDimitry Andric prev_permutation(BidirectionalIterator first, BidirectionalIterator last); 6390b57cec5SDimitry Andric 6400b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 641e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 6420b57cec5SDimitry Andric prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 6430b57cec5SDimitry Andric 6440b57cec5SDimitry Andric} // std 6450b57cec5SDimitry Andric 6460b57cec5SDimitry Andric*/ 6470b57cec5SDimitry Andric 6480b57cec5SDimitry Andric#include <__config> 649fe6060f1SDimitry Andric#include <__debug> 650fe6060f1SDimitry Andric#include <__bits> // __libcpp_clz 651fe6060f1SDimitry Andric#include <cstddef> 6520b57cec5SDimitry Andric#include <cstring> 653fe6060f1SDimitry Andric#include <functional> 654fe6060f1SDimitry Andric#include <initializer_list> 6550b57cec5SDimitry Andric#include <utility> // needed to provide swap_ranges. 6560b57cec5SDimitry Andric#include <memory> 6570b57cec5SDimitry Andric#include <iterator> 658fe6060f1SDimitry Andric#include <memory> 659fe6060f1SDimitry Andric#include <type_traits> 660fe6060f1SDimitry Andric#include <utility> // swap_ranges 6610b57cec5SDimitry Andric#include <version> 6620b57cec5SDimitry Andric 663fe6060f1SDimitry Andric#include <__algorithm/adjacent_find.h> 664fe6060f1SDimitry Andric#include <__algorithm/all_of.h> 665fe6060f1SDimitry Andric#include <__algorithm/any_of.h> 666fe6060f1SDimitry Andric#include <__algorithm/binary_search.h> 667fe6060f1SDimitry Andric#include <__algorithm/clamp.h> 668fe6060f1SDimitry Andric#include <__algorithm/comp.h> 669fe6060f1SDimitry Andric#include <__algorithm/comp_ref_type.h> 670fe6060f1SDimitry Andric#include <__algorithm/copy.h> 671fe6060f1SDimitry Andric#include <__algorithm/copy_backward.h> 672fe6060f1SDimitry Andric#include <__algorithm/copy_if.h> 673fe6060f1SDimitry Andric#include <__algorithm/copy_n.h> 674fe6060f1SDimitry Andric#include <__algorithm/count.h> 675fe6060f1SDimitry Andric#include <__algorithm/count_if.h> 676fe6060f1SDimitry Andric#include <__algorithm/equal.h> 677fe6060f1SDimitry Andric#include <__algorithm/equal_range.h> 678fe6060f1SDimitry Andric#include <__algorithm/fill_n.h> 679fe6060f1SDimitry Andric#include <__algorithm/fill.h> 680fe6060f1SDimitry Andric#include <__algorithm/find.h> 681fe6060f1SDimitry Andric#include <__algorithm/find_end.h> 682fe6060f1SDimitry Andric#include <__algorithm/find_first_of.h> 683fe6060f1SDimitry Andric#include <__algorithm/find_if.h> 684fe6060f1SDimitry Andric#include <__algorithm/find_if_not.h> 685fe6060f1SDimitry Andric#include <__algorithm/for_each.h> 686fe6060f1SDimitry Andric#include <__algorithm/for_each_n.h> 687fe6060f1SDimitry Andric#include <__algorithm/generate_n.h> 688fe6060f1SDimitry Andric#include <__algorithm/generate.h> 689fe6060f1SDimitry Andric#include <__algorithm/half_positive.h> 690fe6060f1SDimitry Andric#include <__algorithm/includes.h> 691fe6060f1SDimitry Andric#include <__algorithm/inplace_merge.h> 692fe6060f1SDimitry Andric#include <__algorithm/is_heap.h> 693fe6060f1SDimitry Andric#include <__algorithm/is_heap_until.h> 694fe6060f1SDimitry Andric#include <__algorithm/is_partitioned.h> 695fe6060f1SDimitry Andric#include <__algorithm/is_permutation.h> 696fe6060f1SDimitry Andric#include <__algorithm/is_sorted.h> 697fe6060f1SDimitry Andric#include <__algorithm/is_sorted_until.h> 698fe6060f1SDimitry Andric#include <__algorithm/iter_swap.h> 699fe6060f1SDimitry Andric#include <__algorithm/lexicographical_compare.h> 700fe6060f1SDimitry Andric#include <__algorithm/lower_bound.h> 701fe6060f1SDimitry Andric#include <__algorithm/make_heap.h> 702fe6060f1SDimitry Andric#include <__algorithm/max.h> 703fe6060f1SDimitry Andric#include <__algorithm/max_element.h> 704fe6060f1SDimitry Andric#include <__algorithm/merge.h> 705fe6060f1SDimitry Andric#include <__algorithm/min.h> 706fe6060f1SDimitry Andric#include <__algorithm/min_element.h> 707fe6060f1SDimitry Andric#include <__algorithm/minmax.h> 708fe6060f1SDimitry Andric#include <__algorithm/minmax_element.h> 709fe6060f1SDimitry Andric#include <__algorithm/mismatch.h> 710fe6060f1SDimitry Andric#include <__algorithm/move.h> 711fe6060f1SDimitry Andric#include <__algorithm/move_backward.h> 712fe6060f1SDimitry Andric#include <__algorithm/next_permutation.h> 713fe6060f1SDimitry Andric#include <__algorithm/none_of.h> 714fe6060f1SDimitry Andric#include <__algorithm/nth_element.h> 715fe6060f1SDimitry Andric#include <__algorithm/partial_sort.h> 716fe6060f1SDimitry Andric#include <__algorithm/partial_sort_copy.h> 717fe6060f1SDimitry Andric#include <__algorithm/partition.h> 718fe6060f1SDimitry Andric#include <__algorithm/partition_copy.h> 719fe6060f1SDimitry Andric#include <__algorithm/partition_point.h> 720fe6060f1SDimitry Andric#include <__algorithm/pop_heap.h> 721fe6060f1SDimitry Andric#include <__algorithm/prev_permutation.h> 722fe6060f1SDimitry Andric#include <__algorithm/push_heap.h> 723fe6060f1SDimitry Andric#include <__algorithm/remove.h> 724fe6060f1SDimitry Andric#include <__algorithm/remove_copy.h> 725fe6060f1SDimitry Andric#include <__algorithm/remove_copy_if.h> 726fe6060f1SDimitry Andric#include <__algorithm/remove_if.h> 727fe6060f1SDimitry Andric#include <__algorithm/replace.h> 728fe6060f1SDimitry Andric#include <__algorithm/replace_copy.h> 729fe6060f1SDimitry Andric#include <__algorithm/replace_copy_if.h> 730fe6060f1SDimitry Andric#include <__algorithm/replace_if.h> 731fe6060f1SDimitry Andric#include <__algorithm/reverse.h> 732fe6060f1SDimitry Andric#include <__algorithm/reverse_copy.h> 733fe6060f1SDimitry Andric#include <__algorithm/rotate.h> 734fe6060f1SDimitry Andric#include <__algorithm/rotate_copy.h> 735fe6060f1SDimitry Andric#include <__algorithm/sample.h> 736fe6060f1SDimitry Andric#include <__algorithm/search.h> 737fe6060f1SDimitry Andric#include <__algorithm/search_n.h> 738fe6060f1SDimitry Andric#include <__algorithm/set_difference.h> 739fe6060f1SDimitry Andric#include <__algorithm/set_intersection.h> 740fe6060f1SDimitry Andric#include <__algorithm/set_symmetric_difference.h> 741fe6060f1SDimitry Andric#include <__algorithm/set_union.h> 742fe6060f1SDimitry Andric#include <__algorithm/shift_left.h> 743fe6060f1SDimitry Andric#include <__algorithm/shift_right.h> 744fe6060f1SDimitry Andric#include <__algorithm/shuffle.h> 745fe6060f1SDimitry Andric#include <__algorithm/sift_down.h> 746fe6060f1SDimitry Andric#include <__algorithm/sort.h> 747fe6060f1SDimitry Andric#include <__algorithm/sort_heap.h> 748fe6060f1SDimitry Andric#include <__algorithm/stable_partition.h> 749fe6060f1SDimitry Andric#include <__algorithm/stable_sort.h> 750fe6060f1SDimitry Andric#include <__algorithm/swap_ranges.h> 751fe6060f1SDimitry Andric#include <__algorithm/transform.h> 752fe6060f1SDimitry Andric#include <__algorithm/unique_copy.h> 753fe6060f1SDimitry Andric#include <__algorithm/unique.h> 754fe6060f1SDimitry Andric#include <__algorithm/unwrap_iter.h> 755fe6060f1SDimitry Andric#include <__algorithm/upper_bound.h> 7560b57cec5SDimitry Andric 7570b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 7580b57cec5SDimitry Andric#pragma GCC system_header 7590b57cec5SDimitry Andric#endif 7600b57cec5SDimitry Andric 761e40139ffSDimitry Andric#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) && _LIBCPP_STD_VER >= 17 762e40139ffSDimitry Andric# include <__pstl_algorithm> 763e40139ffSDimitry Andric#endif 764e40139ffSDimitry Andric 7650b57cec5SDimitry Andric#endif // _LIBCPP_ALGORITHM 766