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 { 22*81ad6265SDimitry Andric 23*81ad6265SDimitry Andric // [algorithms.results], algorithm result types 24*81ad6265SDimitry Andric template <class I, class F> 25*81ad6265SDimitry Andric struct in_fun_result; // since C++20 26*81ad6265SDimitry Andric 2704eeddc0SDimitry Andric template <class I1, class I2> 2804eeddc0SDimitry Andric struct in_in_result; // since C++20 291fd87a68SDimitry Andric 30*81ad6265SDimitry Andric template <class I, class O> 31*81ad6265SDimitry Andric struct in_out_result; // since C++20 32*81ad6265SDimitry Andric 331fd87a68SDimitry Andric template <class I1, class I2, class O> 341fd87a68SDimitry Andric struct in_in_out_result; // since C++20 35*81ad6265SDimitry Andric 36*81ad6265SDimitry Andric template <class I, class O1, class O2> 37*81ad6265SDimitry Andric struct in_out_out_result; // since C++20 38*81ad6265SDimitry Andric 39*81ad6265SDimitry Andric template <class I1, class I2> 40*81ad6265SDimitry Andric struct min_max_result; // since C++20 41*81ad6265SDimitry Andric 42*81ad6265SDimitry Andric template <class I> 43*81ad6265SDimitry Andric struct in_found_result; // since C++20 44*81ad6265SDimitry Andric 45*81ad6265SDimitry Andric template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 46*81ad6265SDimitry Andric indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> // since C++20 47*81ad6265SDimitry Andric constexpr I min_element(I first, S last, Comp comp = {}, Proj proj = {}); 48*81ad6265SDimitry Andric 49*81ad6265SDimitry Andric template<forward_range R, class Proj = identity, 50*81ad6265SDimitry Andric indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> // since C++20 51*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> min_element(R&& r, Comp comp = {}, Proj proj = {}); 52*81ad6265SDimitry Andric 53*81ad6265SDimitry Andric template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 54*81ad6265SDimitry Andric indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 55*81ad6265SDimitry Andric constexpr I ranges::max_element(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 56*81ad6265SDimitry Andric 57*81ad6265SDimitry Andric template<forward_range R, class Proj = identity, 58*81ad6265SDimitry Andric indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 59*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> ranges::max_element(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 60*81ad6265SDimitry Andric 61*81ad6265SDimitry Andric template<class I1, class I2> 62*81ad6265SDimitry Andric using mismatch_result = in_in_result<I1, I2>; 63*81ad6265SDimitry Andric 64*81ad6265SDimitry Andric template <input_iterator I1, sentinel_for<_I1> S1, input_iterator I2, sentinel_for<_I2> S2, 65*81ad6265SDimitry Andric class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 66*81ad6265SDimitry Andric requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 67*81ad6265SDimitry Andric constexpr mismatch_result<_I1, _I2> 68*81ad6265SDimitry Andric mismatch()(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) // since C++20 69*81ad6265SDimitry Andric 70*81ad6265SDimitry Andric template <input_range R1, input_range R2, 71*81ad6265SDimitry Andric class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 72*81ad6265SDimitry Andric requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 73*81ad6265SDimitry Andric constexpr mismatch_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 74*81ad6265SDimitry Andric mismatch(R1&& r1, R2&& r2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) // since C++20 75*81ad6265SDimitry Andric 76*81ad6265SDimitry Andric requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 77*81ad6265SDimitry Andric constexpr I find(I first, S last, const T& value, Proj proj = {}); // since C++20 78*81ad6265SDimitry Andric 79*81ad6265SDimitry Andric template<input_range R, class T, class Proj = identity> 80*81ad6265SDimitry Andric requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 81*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> 82*81ad6265SDimitry Andric find(R&& r, const T& value, Proj proj = {}); // since C++20 83*81ad6265SDimitry Andric 84*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class Proj = identity, 85*81ad6265SDimitry Andric indirect_unary_predicate<projected<I, Proj>> Pred> 86*81ad6265SDimitry Andric constexpr I find_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 87*81ad6265SDimitry Andric 88*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 89*81ad6265SDimitry Andric indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 90*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> 91*81ad6265SDimitry Andric find_if(R&& r, Pred pred, Proj proj = {}); // since C++20 92*81ad6265SDimitry Andric 93*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class Proj = identity, 94*81ad6265SDimitry Andric indirect_unary_predicate<projected<I, Proj>> Pred> 95*81ad6265SDimitry Andric constexpr I find_if_not(I first, S last, Pred pred, Proj proj = {}); // since C++20 96*81ad6265SDimitry Andric 97*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 98*81ad6265SDimitry Andric indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 99*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> 100*81ad6265SDimitry Andric find_if_not(R&& r, Pred pred, Proj proj = {}); // since C++20 101*81ad6265SDimitry Andric 102*81ad6265SDimitry Andric template<class T, class Proj = identity, 103*81ad6265SDimitry Andric indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 104*81ad6265SDimitry Andric constexpr const T& min(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 105*81ad6265SDimitry Andric 106*81ad6265SDimitry Andric template<copyable T, class Proj = identity, 107*81ad6265SDimitry Andric indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 108*81ad6265SDimitry Andric constexpr T min(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 109*81ad6265SDimitry Andric 110*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 111*81ad6265SDimitry Andric indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 112*81ad6265SDimitry Andric requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 113*81ad6265SDimitry Andric constexpr range_value_t<R> 114*81ad6265SDimitry Andric min(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 115*81ad6265SDimitry Andric 116*81ad6265SDimitry Andric template<class T, class Proj = identity, 117*81ad6265SDimitry Andric indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 118*81ad6265SDimitry Andric constexpr const T& max(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 119*81ad6265SDimitry Andric 120*81ad6265SDimitry Andric template<copyable T, class Proj = identity, 121*81ad6265SDimitry Andric indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 122*81ad6265SDimitry Andric constexpr T max(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 123*81ad6265SDimitry Andric 124*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 125*81ad6265SDimitry Andric indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 126*81ad6265SDimitry Andric requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 127*81ad6265SDimitry Andric constexpr range_value_t<R> 128*81ad6265SDimitry Andric max(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 129*81ad6265SDimitry Andric 130*81ad6265SDimitry Andric template<class I, class O> 131*81ad6265SDimitry Andric using unary_transform_result = in_out_result<I, O>; // since C++20 132*81ad6265SDimitry Andric 133*81ad6265SDimitry Andric template<class I1, class I2, class O> 134*81ad6265SDimitry Andric using binary_transform_result = in_in_out_result<I1, I2, O>; // since C++20 135*81ad6265SDimitry Andric 136*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, 137*81ad6265SDimitry Andric copy_constructible F, class Proj = identity> 138*81ad6265SDimitry Andric requires indirectly_writable<O, indirect_result_t<F&, projected<I, Proj>>> 139*81ad6265SDimitry Andric constexpr ranges::unary_transform_result<I, O> 140*81ad6265SDimitry Andric transform(I first1, S last1, O result, F op, Proj proj = {}); // since C++20 141*81ad6265SDimitry Andric 142*81ad6265SDimitry Andric template<input_range R, weakly_incrementable O, copy_constructible F, 143*81ad6265SDimitry Andric class Proj = identity> 144*81ad6265SDimitry Andric requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>> 145*81ad6265SDimitry Andric constexpr ranges::unary_transform_result<borrowed_iterator_t<R>, O> 146*81ad6265SDimitry Andric transform(R&& r, O result, F op, Proj proj = {}); // since C++20 147*81ad6265SDimitry Andric 148*81ad6265SDimitry Andric template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 149*81ad6265SDimitry Andric weakly_incrementable O, copy_constructible F, class Proj1 = identity, 150*81ad6265SDimitry Andric class Proj2 = identity> 151*81ad6265SDimitry Andric requires indirectly_writable<O, indirect_result_t<F&, projected<I1, Proj1>, 152*81ad6265SDimitry Andric projected<I2, Proj2>>> 153*81ad6265SDimitry Andric constexpr ranges::binary_transform_result<I1, I2, O> 154*81ad6265SDimitry Andric transform(I1 first1, S1 last1, I2 first2, S2 last2, O result, 155*81ad6265SDimitry Andric F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 156*81ad6265SDimitry Andric 157*81ad6265SDimitry Andric template<input_range R1, input_range R2, weakly_incrementable O, 158*81ad6265SDimitry Andric copy_constructible F, class Proj1 = identity, class Proj2 = identity> 159*81ad6265SDimitry Andric requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>, 160*81ad6265SDimitry Andric projected<iterator_t<R2>, Proj2>>> 161*81ad6265SDimitry Andric constexpr ranges::binary_transform_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 162*81ad6265SDimitry Andric transform(R1&& r1, R2&& r2, O result, 163*81ad6265SDimitry Andric F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 164*81ad6265SDimitry Andric 165*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity> 166*81ad6265SDimitry Andric requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 167*81ad6265SDimitry Andric constexpr iter_difference_t<I> 168*81ad6265SDimitry Andric count(I first, S last, const T& value, Proj proj = {}); // since C++20 169*81ad6265SDimitry Andric 170*81ad6265SDimitry Andric template<input_range R, class T, class Proj = identity> 171*81ad6265SDimitry Andric requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 172*81ad6265SDimitry Andric constexpr range_difference_t<R> 173*81ad6265SDimitry Andric count(R&& r, const T& value, Proj proj = {}); // since C++20 174*81ad6265SDimitry Andric 175*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class Proj = identity, 176*81ad6265SDimitry Andric indirect_unary_predicate<projected<I, Proj>> Pred> 177*81ad6265SDimitry Andric constexpr iter_difference_t<I> 178*81ad6265SDimitry Andric count_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 179*81ad6265SDimitry Andric 180*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 181*81ad6265SDimitry Andric indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 182*81ad6265SDimitry Andric constexpr range_difference_t<R> 183*81ad6265SDimitry Andric count_if(R&& r, Pred pred, Proj proj = {}); // since C++20 184*81ad6265SDimitry Andric 185*81ad6265SDimitry Andric template<class T> 186*81ad6265SDimitry Andric using minmax_result = min_max_result<T>; 187*81ad6265SDimitry Andric 188*81ad6265SDimitry Andric template<class T, class Proj = identity, 189*81ad6265SDimitry Andric indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 190*81ad6265SDimitry Andric constexpr ranges::minmax_result<const T&> 191*81ad6265SDimitry Andric minmax(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 192*81ad6265SDimitry Andric 193*81ad6265SDimitry Andric template<copyable T, class Proj = identity, 194*81ad6265SDimitry Andric indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 195*81ad6265SDimitry Andric constexpr ranges::minmax_result<T> 196*81ad6265SDimitry Andric minmax(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 197*81ad6265SDimitry Andric 198*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 199*81ad6265SDimitry Andric indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 200*81ad6265SDimitry Andric requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 201*81ad6265SDimitry Andric constexpr ranges::minmax_result<range_value_t<R>> 202*81ad6265SDimitry Andric minmax(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 203*81ad6265SDimitry Andric 204*81ad6265SDimitry Andric template<class I> 205*81ad6265SDimitry Andric using minmax_element_result = min_max_result<I>; 206*81ad6265SDimitry Andric 207*81ad6265SDimitry Andric template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 208*81ad6265SDimitry Andric indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 209*81ad6265SDimitry Andric constexpr ranges::minmax_element_result<I> 210*81ad6265SDimitry Andric minmax_element(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 211*81ad6265SDimitry Andric 212*81ad6265SDimitry Andric template<forward_range R, class Proj = identity, 213*81ad6265SDimitry Andric indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 214*81ad6265SDimitry Andric constexpr ranges::minmax_element_result<borrowed_iterator_t<R>> 215*81ad6265SDimitry Andric minmax_element(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 216*81ad6265SDimitry Andric 217*81ad6265SDimitry Andric template<class I, class O> 218*81ad6265SDimitry Andric using copy_result = in_out_result<I, O>; // since C++20 219*81ad6265SDimitry Andric 220*81ad6265SDimitry Andric template<class I, class O> 221*81ad6265SDimitry Andric using copy_n_result = in_out_result<I, O>; // since C++20 222*81ad6265SDimitry Andric 223*81ad6265SDimitry Andric template<class I, class O> 224*81ad6265SDimitry Andric using copy_if_result = in_out_result<I, O>; // since C++20 225*81ad6265SDimitry Andric 226*81ad6265SDimitry Andric template<class I1, class I2> 227*81ad6265SDimitry Andric using copy_backward_result = in_out_result<I1, I2>; // since C++20 228*81ad6265SDimitry Andric 229*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, weakly_incrementable O> 230*81ad6265SDimitry Andric requires indirectly_copyable<I, O> 231*81ad6265SDimitry Andric constexpr ranges::copy_result<I, O> ranges::copy(I first, S last, O result); // since C++20 232*81ad6265SDimitry Andric 233*81ad6265SDimitry Andric template<input_range R, weakly_incrementable O> 234*81ad6265SDimitry Andric requires indirectly_copyable<iterator_t<R>, O> 235*81ad6265SDimitry Andric constexpr ranges::copy_result<borrowed_iterator_t<R>, O> ranges::copy(R&& r, O result); // since C++20 236*81ad6265SDimitry Andric 237*81ad6265SDimitry Andric template<input_iterator I, weakly_incrementable O> 238*81ad6265SDimitry Andric requires indirectly_copyable<I, O> 239*81ad6265SDimitry Andric constexpr ranges::copy_n_result<I, O> 240*81ad6265SDimitry Andric ranges::copy_n(I first, iter_difference_t<I> n, O result); // since C++20 241*81ad6265SDimitry Andric 242*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity, 243*81ad6265SDimitry Andric indirect_unary_predicate<projected<I, Proj>> Pred> 244*81ad6265SDimitry Andric requires indirectly_copyable<I, O> 245*81ad6265SDimitry Andric constexpr ranges::copy_if_result<I, O> 246*81ad6265SDimitry Andric ranges::copy_if(I first, S last, O result, Pred pred, Proj proj = {}); // since C++20 247*81ad6265SDimitry Andric 248*81ad6265SDimitry Andric template<input_range R, weakly_incrementable O, class Proj = identity, 249*81ad6265SDimitry Andric indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 250*81ad6265SDimitry Andric requires indirectly_copyable<iterator_t<R>, O> 251*81ad6265SDimitry Andric constexpr ranges::copy_if_result<borrowed_iterator_t<R>, O> 252*81ad6265SDimitry Andric ranges::copy_if(R&& r, O result, Pred pred, Proj proj = {}); // since C++20 253*81ad6265SDimitry Andric 254*81ad6265SDimitry Andric template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2> 255*81ad6265SDimitry Andric requires indirectly_copyable<I1, I2> 256*81ad6265SDimitry Andric constexpr ranges::copy_backward_result<I1, I2> 257*81ad6265SDimitry Andric ranges::copy_backward(I1 first, S1 last, I2 result); // since C++20 258*81ad6265SDimitry Andric 259*81ad6265SDimitry Andric template<bidirectional_range R, bidirectional_iterator I> 260*81ad6265SDimitry Andric requires indirectly_copyable<iterator_t<R>, I> 261*81ad6265SDimitry Andric constexpr ranges::copy_backward_result<borrowed_iterator_t<R>, I> 262*81ad6265SDimitry Andric ranges::copy_backward(R&& r, I result); // since C++20 263*81ad6265SDimitry Andric 264*81ad6265SDimitry Andric template<class I, class F> 265*81ad6265SDimitry Andric using for_each_result = in_fun_result<I, F>; // since C++20 266*81ad6265SDimitry Andric 267*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class Proj = identity, 268*81ad6265SDimitry Andric indirectly_unary_invocable<projected<I, Proj>> Fun> 269*81ad6265SDimitry Andric constexpr ranges::for_each_result<I, Fun> 270*81ad6265SDimitry Andric ranges::for_each(I first, S last, Fun f, Proj proj = {}); // since C++20 271*81ad6265SDimitry Andric 272*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 273*81ad6265SDimitry Andric indirectly_unary_invocable<projected<iterator_t<R>, Proj>> Fun> 274*81ad6265SDimitry Andric constexpr ranges::for_each_result<borrowed_iterator_t<R>, Fun> 275*81ad6265SDimitry Andric ranges::for_each(R&& r, Fun f, Proj proj = {}); // since C++20 276*81ad6265SDimitry Andric 277*81ad6265SDimitry Andric template<input_iterator I, class Proj = identity, 278*81ad6265SDimitry Andric indirectly_unary_invocable<projected<I, Proj>> Fun> 279*81ad6265SDimitry Andric constexpr ranges::for_each_n_result<I, Fun> 280*81ad6265SDimitry Andric ranges::for_each_n(I first, iter_difference_t<I> n, Fun f, Proj proj = {}); // since C++20 281*81ad6265SDimitry Andric 282*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class Proj = identity, 283*81ad6265SDimitry Andric indirect_unary_predicate<projected<I, Proj>> Pred> 284*81ad6265SDimitry Andric constexpr bool ranges::is_partitioned(I first, S last, Pred pred, Proj proj = {}); // since C++20 285*81ad6265SDimitry Andric 286*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 287*81ad6265SDimitry Andric indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 288*81ad6265SDimitry Andric constexpr bool ranges::is_partitioned(R&& r, Pred pred, Proj proj = {}); // since C++20 289*81ad6265SDimitry Andric 290*81ad6265SDimitry Andric template<bidirectional_iterator I, sentinel_for<I> S> 291*81ad6265SDimitry Andric requires permutable<I> 292*81ad6265SDimitry Andric constexpr I ranges::reverse(I first, S last); // since C++20 293*81ad6265SDimitry Andric 294*81ad6265SDimitry Andric template<bidirectional_range R> 295*81ad6265SDimitry Andric requires permutable<iterator_t<R>> 296*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> ranges::reverse(R&& r); // since C++20 297*81ad6265SDimitry Andric 298*81ad6265SDimitry Andric template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 299*81ad6265SDimitry Andric class Proj = identity> 300*81ad6265SDimitry Andric requires sortable<I, Comp, Proj> 301*81ad6265SDimitry Andric constexpr I 302*81ad6265SDimitry Andric ranges::sort(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 303*81ad6265SDimitry Andric 304*81ad6265SDimitry Andric template<random_access_range R, class Comp = ranges::less, class Proj = identity> 305*81ad6265SDimitry Andric requires sortable<iterator_t<R>, Comp, Proj> 306*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> 307*81ad6265SDimitry Andric ranges::sort(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 308*81ad6265SDimitry Andric 309*81ad6265SDimitry Andric template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 310*81ad6265SDimitry Andric class Proj = identity> 311*81ad6265SDimitry Andric requires sortable<I, Comp, Proj> 312*81ad6265SDimitry Andric I ranges::stable_sort(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 313*81ad6265SDimitry Andric 314*81ad6265SDimitry Andric template<random_access_range R, class Comp = ranges::less, class Proj = identity> 315*81ad6265SDimitry Andric requires sortable<iterator_t<R>, Comp, Proj> 316*81ad6265SDimitry Andric borrowed_iterator_t<R> 317*81ad6265SDimitry Andric ranges::stable_sort(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 318*81ad6265SDimitry Andric 319*81ad6265SDimitry Andric template<class T, output_iterator<const T&> O, sentinel_for<O> S> 320*81ad6265SDimitry Andric constexpr O ranges::fill(O first, S last, const T& value); // since C++20 321*81ad6265SDimitry Andric 322*81ad6265SDimitry Andric template<class T, output_range<const T&> R> 323*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> ranges::fill(R&& r, const T& value); // since C++20 324*81ad6265SDimitry Andric 325*81ad6265SDimitry Andric template<class T, output_iterator<const T&> O> 326*81ad6265SDimitry Andric constexpr O ranges::fill_n(O first, iter_difference_t<O> n, const T& value); // since C++20 327*81ad6265SDimitry Andric 328*81ad6265SDimitry Andric template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 329*81ad6265SDimitry Andric class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 330*81ad6265SDimitry Andric requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 331*81ad6265SDimitry Andric constexpr bool ranges::equal(I1 first1, S1 last1, I2 first2, S2 last2, 332*81ad6265SDimitry Andric Pred pred = {}, 333*81ad6265SDimitry Andric Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 334*81ad6265SDimitry Andric 335*81ad6265SDimitry Andric template<input_range R1, input_range R2, class Pred = ranges::equal_to, 336*81ad6265SDimitry Andric class Proj1 = identity, class Proj2 = identity> 337*81ad6265SDimitry Andric requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 338*81ad6265SDimitry Andric constexpr bool ranges::equal(R1&& r1, R2&& r2, Pred pred = {}, 339*81ad6265SDimitry Andric Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 340*81ad6265SDimitry Andric 341*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class Proj = identity, 342*81ad6265SDimitry Andric indirect_unary_predicate<projected<I, Proj>> Pred> 343*81ad6265SDimitry Andric constexpr bool ranges::all_of(I first, S last, Pred pred, Proj proj = {}); // since C++20 344*81ad6265SDimitry Andric 345*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 346*81ad6265SDimitry Andric indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 347*81ad6265SDimitry Andric constexpr bool ranges::all_of(R&& r, Pred pred, Proj proj = {}); // since C++20 348*81ad6265SDimitry Andric 349*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class Proj = identity, 350*81ad6265SDimitry Andric indirect_unary_predicate<projected<I, Proj>> Pred> 351*81ad6265SDimitry Andric constexpr bool ranges::any_of(I first, S last, Pred pred, Proj proj = {}); // since C++20 352*81ad6265SDimitry Andric 353*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 354*81ad6265SDimitry Andric indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 355*81ad6265SDimitry Andric constexpr bool ranges::any_of(R&& r, Pred pred, Proj proj = {}); // since C++20 356*81ad6265SDimitry Andric 357*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class Proj = identity, 358*81ad6265SDimitry Andric indirect_unary_predicate<projected<I, Proj>> Pred> 359*81ad6265SDimitry Andric constexpr bool ranges::none_of(I first, S last, Pred pred, Proj proj = {}); // since C++20 360*81ad6265SDimitry Andric 361*81ad6265SDimitry Andric template<input_range R, class Proj = identity, 362*81ad6265SDimitry Andric indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 363*81ad6265SDimitry Andric constexpr bool ranges::none_of(R&& r, Pred pred, Proj proj = {}); // since C++20 364*81ad6265SDimitry Andric 365*81ad6265SDimitry Andric template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 366*81ad6265SDimitry Andric indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 367*81ad6265SDimitry Andric constexpr bool ranges::is_sorted(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 368*81ad6265SDimitry Andric 369*81ad6265SDimitry Andric template<forward_range R, class Proj = identity, 370*81ad6265SDimitry Andric indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 371*81ad6265SDimitry Andric constexpr bool ranges::is_sorted(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 372*81ad6265SDimitry Andric 373*81ad6265SDimitry Andric template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 374*81ad6265SDimitry Andric indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 375*81ad6265SDimitry Andric constexpr I ranges::is_sorted_until(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 376*81ad6265SDimitry Andric 377*81ad6265SDimitry Andric template<forward_range R, class Proj = identity, 378*81ad6265SDimitry Andric indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 379*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> 380*81ad6265SDimitry Andric ranges::is_sorted_until(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 381*81ad6265SDimitry Andric 382*81ad6265SDimitry Andric template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 383*81ad6265SDimitry Andric indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 384*81ad6265SDimitry Andric constexpr I upper_bound(I first, S last, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 385*81ad6265SDimitry Andric 386*81ad6265SDimitry Andric template<forward_range R, class T, class Proj = identity, 387*81ad6265SDimitry Andric indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 388*81ad6265SDimitry Andric ranges::less> 389*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> 390*81ad6265SDimitry Andric upper_bound(R&& r, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 391*81ad6265SDimitry Andric 392*81ad6265SDimitry Andric template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 393*81ad6265SDimitry Andric indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 394*81ad6265SDimitry Andric constexpr I lower_bound(I first, S last, const T& value, Comp comp = {}, 395*81ad6265SDimitry Andric Proj proj = {}); // since C++20 396*81ad6265SDimitry Andric template<forward_range R, class T, class Proj = identity, 397*81ad6265SDimitry Andric indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 398*81ad6265SDimitry Andric ranges::less> 399*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> 400*81ad6265SDimitry Andric lower_bound(R&& r, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 401*81ad6265SDimitry Andric 402*81ad6265SDimitry Andric template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 403*81ad6265SDimitry Andric indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 404*81ad6265SDimitry Andric constexpr bool binary_search(I first, S last, const T& value, Comp comp = {}, 405*81ad6265SDimitry Andric Proj proj = {}); // since C++20 406*81ad6265SDimitry Andric 407*81ad6265SDimitry Andric template<forward_range R, class T, class Proj = identity, 408*81ad6265SDimitry Andric indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 409*81ad6265SDimitry Andric ranges::less> 410*81ad6265SDimitry Andric constexpr bool binary_search(R&& r, const T& value, Comp comp = {}, 411*81ad6265SDimitry Andric Proj proj = {}); // since C++20 412*81ad6265SDimitry Andric template<input_iterator I1, sentinel_for<I1> S1, forward_iterator I2, sentinel_for<I2> S2, 413*81ad6265SDimitry Andric class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 414*81ad6265SDimitry Andric requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 415*81ad6265SDimitry Andric constexpr I1 ranges::find_first_of(I1 first1, S1 last1, I2 first2, S2 last2, 416*81ad6265SDimitry Andric Pred pred = {}, 417*81ad6265SDimitry Andric Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 418*81ad6265SDimitry Andric 419*81ad6265SDimitry Andric template<input_range R1, forward_range R2, 420*81ad6265SDimitry Andric class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 421*81ad6265SDimitry Andric requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 422*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R1> 423*81ad6265SDimitry Andric ranges::find_first_of(R1&& r1, R2&& r2, 424*81ad6265SDimitry Andric Pred pred = {}, 425*81ad6265SDimitry Andric Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 426*81ad6265SDimitry Andric 427*81ad6265SDimitry Andric template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 428*81ad6265SDimitry Andric indirect_binary_predicate<projected<I, Proj>, 429*81ad6265SDimitry Andric projected<I, Proj>> Pred = ranges::equal_to> 430*81ad6265SDimitry Andric constexpr I ranges::adjacent_find(I first, S last, Pred pred = {}, Proj proj = {}); // since C+20 431*81ad6265SDimitry Andric 432*81ad6265SDimitry Andric template<forward_range R, class Proj = identity, 433*81ad6265SDimitry Andric indirect_binary_predicate<projected<iterator_t<R>, Proj>, 434*81ad6265SDimitry Andric projected<iterator_t<R>, Proj>> Pred = ranges::equal_to> 435*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> ranges::adjacent_find(R&& r, Pred pred = {}, Proj proj = {}); // since C++20 436*81ad6265SDimitry Andric 437*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class T1, class T2, class Proj = identity> 438*81ad6265SDimitry Andric requires indirectly_writable<I, const T2&> && 439*81ad6265SDimitry Andric indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T1*> 440*81ad6265SDimitry Andric constexpr I 441*81ad6265SDimitry Andric ranges::replace(I first, S last, const T1& old_value, const T2& new_value, Proj proj = {}); // since C++20 442*81ad6265SDimitry Andric 443*81ad6265SDimitry Andric template<input_range R, class T1, class T2, class Proj = identity> 444*81ad6265SDimitry Andric requires indirectly_writable<iterator_t<R>, const T2&> && 445*81ad6265SDimitry Andric indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T1*> 446*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> 447*81ad6265SDimitry Andric ranges::replace(R&& r, const T1& old_value, const T2& new_value, Proj proj = {}); // since C++20 448*81ad6265SDimitry Andric 449*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity, 450*81ad6265SDimitry Andric indirect_unary_predicate<projected<I, Proj>> Pred> 451*81ad6265SDimitry Andric requires indirectly_writable<I, const T&> 452*81ad6265SDimitry Andric constexpr I ranges::replace_if(I first, S last, Pred pred, const T& new_value, Proj proj = {}); // since C++20 453*81ad6265SDimitry Andric 454*81ad6265SDimitry Andric template<input_range R, class T, class Proj = identity, 455*81ad6265SDimitry Andric indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 456*81ad6265SDimitry Andric requires indirectly_writable<iterator_t<R>, const T&> 457*81ad6265SDimitry Andric constexpr borrowed_iterator_t<R> 458*81ad6265SDimitry Andric ranges::replace_if(R&& r, Pred pred, const T& new_value, Proj proj = {}); // since C++20 459*81ad6265SDimitry Andric 460*81ad6265SDimitry Andric template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 461*81ad6265SDimitry Andric class Proj1 = identity, class Proj2 = identity, 462*81ad6265SDimitry Andric indirect_strict_weak_order<projected<I1, Proj1>, 463*81ad6265SDimitry Andric projected<I2, Proj2>> Comp = ranges::less> 464*81ad6265SDimitry Andric constexpr bool 465*81ad6265SDimitry Andric ranges::lexicographical_compare(I1 first1, S1 last1, I2 first2, S2 last2, 466*81ad6265SDimitry Andric Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 467*81ad6265SDimitry Andric 468*81ad6265SDimitry Andric template<input_range R1, input_range R2, class Proj1 = identity, 469*81ad6265SDimitry Andric class Proj2 = identity, 470*81ad6265SDimitry Andric indirect_strict_weak_order<projected<iterator_t<R1>, Proj1>, 471*81ad6265SDimitry Andric projected<iterator_t<R2>, Proj2>> Comp = ranges::less> 472*81ad6265SDimitry Andric constexpr bool 473*81ad6265SDimitry Andric ranges::lexicographical_compare(R1&& r1, R2&& r2, Comp comp = {}, 474*81ad6265SDimitry Andric Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 475*81ad6265SDimitry Andric 476*81ad6265SDimitry Andric template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2> 477*81ad6265SDimitry Andric requires indirectly_movable<I1, I2> 478*81ad6265SDimitry Andric constexpr ranges::move_backward_result<I1, I2> 479*81ad6265SDimitry Andric ranges::move_backward(I1 first, S1 last, I2 result); // since C++20 480*81ad6265SDimitry Andric 481*81ad6265SDimitry Andric template<bidirectional_range R, bidirectional_iterator I> 482*81ad6265SDimitry Andric requires indirectly_movable<iterator_t<R>, I> 483*81ad6265SDimitry Andric constexpr ranges::move_backward_result<borrowed_iterator_t<R>, I> 484*81ad6265SDimitry Andric ranges::move_backward(R&& r, I result); // since C++20 485*81ad6265SDimitry Andric 486*81ad6265SDimitry Andric template<input_iterator I, sentinel_for<I> S, weakly_incrementable O> 487*81ad6265SDimitry Andric requires indirectly_movable<I, O> 488*81ad6265SDimitry Andric constexpr ranges::move_result<I, O> 489*81ad6265SDimitry Andric ranges::move(I first, S last, O result); // since C++20 490*81ad6265SDimitry Andric 491*81ad6265SDimitry Andric template<input_range R, weakly_incrementable O> 492*81ad6265SDimitry Andric requires indirectly_movable<iterator_t<R>, O> 493*81ad6265SDimitry Andric constexpr ranges::move_result<borrowed_iterator_t<R>, O> 494*81ad6265SDimitry Andric ranges::move(R&& r, O result); // since C++20 495*81ad6265SDimitry Andric 496*81ad6265SDimitry Andric 49704eeddc0SDimitry Andric} 49804eeddc0SDimitry Andric 4990b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5000b57cec5SDimitry Andric all_of(InputIterator first, InputIterator last, Predicate pred); 5010b57cec5SDimitry Andric 5020b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 5030b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5040b57cec5SDimitry Andric any_of(InputIterator first, InputIterator last, Predicate pred); 5050b57cec5SDimitry Andric 5060b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 5070b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5080b57cec5SDimitry Andric none_of(InputIterator first, InputIterator last, Predicate pred); 5090b57cec5SDimitry Andric 5100b57cec5SDimitry Andrictemplate <class InputIterator, class Function> 5110b57cec5SDimitry Andric constexpr Function // constexpr in C++20 5120b57cec5SDimitry Andric for_each(InputIterator first, InputIterator last, Function f); 5130b57cec5SDimitry Andric 5140b57cec5SDimitry Andrictemplate<class InputIterator, class Size, class Function> 5150b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 5160b57cec5SDimitry Andric for_each_n(InputIterator first, Size n, Function f); // C++17 5170b57cec5SDimitry Andric 5180b57cec5SDimitry Andrictemplate <class InputIterator, class T> 5190b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 5200b57cec5SDimitry Andric find(InputIterator first, InputIterator last, const T& value); 5210b57cec5SDimitry Andric 5220b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 5230b57cec5SDimitry Andric constexpr InputIterator // constexpr in C++20 5240b57cec5SDimitry Andric find_if(InputIterator first, InputIterator last, Predicate pred); 5250b57cec5SDimitry Andric 5260b57cec5SDimitry Andrictemplate<class InputIterator, class Predicate> 527e8d8bef9SDimitry Andric constexpr InputIterator // constexpr in C++20 5280b57cec5SDimitry Andric find_if_not(InputIterator first, InputIterator last, Predicate pred); 5290b57cec5SDimitry Andric 5300b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 531e8d8bef9SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 5320b57cec5SDimitry Andric find_end(ForwardIterator1 first1, ForwardIterator1 last1, 5330b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 5340b57cec5SDimitry Andric 5350b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 536e8d8bef9SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 5370b57cec5SDimitry Andric find_end(ForwardIterator1 first1, ForwardIterator1 last1, 5380b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 5390b57cec5SDimitry Andric 5400b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 5410b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 5420b57cec5SDimitry Andric find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 5430b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 5440b57cec5SDimitry Andric 5450b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 5460b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 5470b57cec5SDimitry Andric find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 5480b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 5490b57cec5SDimitry Andric 5500b57cec5SDimitry Andrictemplate <class ForwardIterator> 5510b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 5520b57cec5SDimitry Andric adjacent_find(ForwardIterator first, ForwardIterator last); 5530b57cec5SDimitry Andric 5540b57cec5SDimitry Andrictemplate <class ForwardIterator, class BinaryPredicate> 5550b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 5560b57cec5SDimitry Andric adjacent_find(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 5570b57cec5SDimitry Andric 5580b57cec5SDimitry Andrictemplate <class InputIterator, class T> 5590b57cec5SDimitry Andric constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 5600b57cec5SDimitry Andric count(InputIterator first, InputIterator last, const T& value); 5610b57cec5SDimitry Andric 5620b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 5630b57cec5SDimitry Andric constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 5640b57cec5SDimitry Andric count_if(InputIterator first, InputIterator last, Predicate pred); 5650b57cec5SDimitry Andric 5660b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 5670b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 5680b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 5690b57cec5SDimitry Andric 5700b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 5710b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 5720b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 5730b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2); // **C++14** 5740b57cec5SDimitry Andric 5750b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 5760b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 5770b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 5780b57cec5SDimitry Andric InputIterator2 first2, BinaryPredicate pred); 5790b57cec5SDimitry Andric 5800b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 5810b57cec5SDimitry Andric constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 5820b57cec5SDimitry Andric mismatch(InputIterator1 first1, InputIterator1 last1, 5830b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, 5840b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 5850b57cec5SDimitry Andric 5860b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 5870b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5880b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 5890b57cec5SDimitry Andric 5900b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 5910b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5920b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 5930b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2); // **C++14** 5940b57cec5SDimitry Andric 5950b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 5960b57cec5SDimitry Andric constexpr bool // constexpr in C++20 5970b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 5980b57cec5SDimitry Andric InputIterator2 first2, BinaryPredicate pred); 5990b57cec5SDimitry Andric 6000b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 6010b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6020b57cec5SDimitry Andric equal(InputIterator1 first1, InputIterator1 last1, 6030b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, 6040b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 6050b57cec5SDimitry Andric 6060b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2> 6070b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6080b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 6090b57cec5SDimitry Andric ForwardIterator2 first2); 6100b57cec5SDimitry Andric 6110b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2> 6120b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6130b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 6140b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); // **C++14** 6150b57cec5SDimitry Andric 6160b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 6170b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6180b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 6190b57cec5SDimitry Andric ForwardIterator2 first2, BinaryPredicate pred); 6200b57cec5SDimitry Andric 6210b57cec5SDimitry Andrictemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 6220b57cec5SDimitry Andric constexpr bool // constexpr in C++20 6230b57cec5SDimitry Andric is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 6240b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, 6250b57cec5SDimitry Andric BinaryPredicate pred); // **C++14** 6260b57cec5SDimitry Andric 6270b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 6280b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 6290b57cec5SDimitry Andric search(ForwardIterator1 first1, ForwardIterator1 last1, 6300b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2); 6310b57cec5SDimitry Andric 6320b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 6330b57cec5SDimitry Andric constexpr ForwardIterator1 // constexpr in C++20 6340b57cec5SDimitry Andric search(ForwardIterator1 first1, ForwardIterator1 last1, 6350b57cec5SDimitry Andric ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 6360b57cec5SDimitry Andric 6370b57cec5SDimitry Andrictemplate <class ForwardIterator, class Size, class T> 6380b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 6390b57cec5SDimitry Andric search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value); 6400b57cec5SDimitry Andric 6410b57cec5SDimitry Andrictemplate <class ForwardIterator, class Size, class T, class BinaryPredicate> 6420b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 6430b57cec5SDimitry Andric search_n(ForwardIterator first, ForwardIterator last, 6440b57cec5SDimitry Andric Size count, const T& value, BinaryPredicate pred); 6450b57cec5SDimitry Andric 6460b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator> 647480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 6480b57cec5SDimitry Andric copy(InputIterator first, InputIterator last, OutputIterator result); 6490b57cec5SDimitry Andric 6500b57cec5SDimitry Andrictemplate<class InputIterator, class OutputIterator, class Predicate> 651480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 6520b57cec5SDimitry Andric copy_if(InputIterator first, InputIterator last, 6530b57cec5SDimitry Andric OutputIterator result, Predicate pred); 6540b57cec5SDimitry Andric 6550b57cec5SDimitry Andrictemplate<class InputIterator, class Size, class OutputIterator> 656480093f4SDimitry Andric constexpr OutputIterator // constexpr in C++20 6570b57cec5SDimitry Andric copy_n(InputIterator first, Size n, OutputIterator result); 6580b57cec5SDimitry Andric 6590b57cec5SDimitry Andrictemplate <class BidirectionalIterator1, class BidirectionalIterator2> 660480093f4SDimitry Andric constexpr BidirectionalIterator2 // constexpr in C++20 6610b57cec5SDimitry Andric copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 6620b57cec5SDimitry Andric BidirectionalIterator2 result); 6630b57cec5SDimitry Andric 664*81ad6265SDimitry Andric// [alg.move], move 665*81ad6265SDimitry Andrictemplate<class InputIterator, class OutputIterator> 666*81ad6265SDimitry Andric constexpr OutputIterator move(InputIterator first, InputIterator last, 667*81ad6265SDimitry Andric OutputIterator result); 668*81ad6265SDimitry Andric 669*81ad6265SDimitry Andrictemplate<class BidirectionalIterator1, class BidirectionalIterator2> 670*81ad6265SDimitry Andric constexpr BidirectionalIterator2 671*81ad6265SDimitry Andric move_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 672*81ad6265SDimitry Andric BidirectionalIterator2 result); 673*81ad6265SDimitry Andric 6740b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 675e8d8bef9SDimitry Andric constexpr ForwardIterator2 // constexpr in C++20 6760b57cec5SDimitry Andric swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2); 6770b57cec5SDimitry Andric 678*81ad6265SDimitry Andricnamespace ranges { 679*81ad6265SDimitry Andric template<class I1, class I2> 680*81ad6265SDimitry Andric using swap_ranges_result = in_in_result<I1, I2>; 681*81ad6265SDimitry Andric 682*81ad6265SDimitry Andrictemplate<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2> 683*81ad6265SDimitry Andric requires indirectly_swappable<I1, I2> 684*81ad6265SDimitry Andric constexpr ranges::swap_ranges_result<I1, I2> 685*81ad6265SDimitry Andric swap_ranges(I1 first1, S1 last1, I2 first2, S2 last2); 686*81ad6265SDimitry Andric 687*81ad6265SDimitry Andrictemplate<input_range R1, input_range R2> 688*81ad6265SDimitry Andric requires indirectly_swappable<iterator_t<R1>, iterator_t<R2>> 689*81ad6265SDimitry Andric constexpr ranges::swap_ranges_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 690*81ad6265SDimitry Andric swap_ranges(R1&& r1, R2&& r2); 691*81ad6265SDimitry Andric} 692*81ad6265SDimitry Andric 6930b57cec5SDimitry Andrictemplate <class ForwardIterator1, class ForwardIterator2> 694e8d8bef9SDimitry Andric constexpr void // constexpr in C++20 6950b57cec5SDimitry Andric iter_swap(ForwardIterator1 a, ForwardIterator2 b); 6960b57cec5SDimitry Andric 6970b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class UnaryOperation> 6980b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 6990b57cec5SDimitry Andric transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op); 7000b57cec5SDimitry Andric 7010b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation> 7020b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 7030b57cec5SDimitry Andric transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 7040b57cec5SDimitry Andric OutputIterator result, BinaryOperation binary_op); 7050b57cec5SDimitry Andric 7060b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 7070b57cec5SDimitry Andric constexpr void // constexpr in C++20 7080b57cec5SDimitry Andric replace(ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value); 7090b57cec5SDimitry Andric 7100b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate, class T> 7110b57cec5SDimitry Andric constexpr void // constexpr in C++20 7120b57cec5SDimitry Andric replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, const T& new_value); 7130b57cec5SDimitry Andric 7140b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class T> 7150b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 7160b57cec5SDimitry Andric replace_copy(InputIterator first, InputIterator last, OutputIterator result, 7170b57cec5SDimitry Andric const T& old_value, const T& new_value); 7180b57cec5SDimitry Andric 7190b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class Predicate, class T> 7200b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 7210b57cec5SDimitry Andric replace_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value); 7220b57cec5SDimitry Andric 7230b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 7240b57cec5SDimitry Andric constexpr void // constexpr in C++20 7250b57cec5SDimitry Andric fill(ForwardIterator first, ForwardIterator last, const T& value); 7260b57cec5SDimitry Andric 7270b57cec5SDimitry Andrictemplate <class OutputIterator, class Size, class T> 7280b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 7290b57cec5SDimitry Andric fill_n(OutputIterator first, Size n, const T& value); 7300b57cec5SDimitry Andric 7310b57cec5SDimitry Andrictemplate <class ForwardIterator, class Generator> 7320b57cec5SDimitry Andric constexpr void // constexpr in C++20 7330b57cec5SDimitry Andric generate(ForwardIterator first, ForwardIterator last, Generator gen); 7340b57cec5SDimitry Andric 7350b57cec5SDimitry Andrictemplate <class OutputIterator, class Size, class Generator> 7360b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 7370b57cec5SDimitry Andric generate_n(OutputIterator first, Size n, Generator gen); 7380b57cec5SDimitry Andric 7390b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 7400b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 7410b57cec5SDimitry Andric remove(ForwardIterator first, ForwardIterator last, const T& value); 7420b57cec5SDimitry Andric 7430b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 7440b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 7450b57cec5SDimitry Andric remove_if(ForwardIterator first, ForwardIterator last, Predicate pred); 7460b57cec5SDimitry Andric 7470b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class T> 7480b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 7490b57cec5SDimitry Andric remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value); 7500b57cec5SDimitry Andric 7510b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class Predicate> 7520b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 7530b57cec5SDimitry Andric remove_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred); 7540b57cec5SDimitry Andric 7550b57cec5SDimitry Andrictemplate <class ForwardIterator> 756e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 7570b57cec5SDimitry Andric unique(ForwardIterator first, ForwardIterator last); 7580b57cec5SDimitry Andric 7590b57cec5SDimitry Andrictemplate <class ForwardIterator, class BinaryPredicate> 760e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 7610b57cec5SDimitry Andric unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 7620b57cec5SDimitry Andric 7630b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator> 764e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 7650b57cec5SDimitry Andric unique_copy(InputIterator first, InputIterator last, OutputIterator result); 7660b57cec5SDimitry Andric 7670b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator, class BinaryPredicate> 768e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 7690b57cec5SDimitry Andric unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred); 7700b57cec5SDimitry Andric 7710b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 772e8d8bef9SDimitry Andric constexpr void // constexpr in C++20 7730b57cec5SDimitry Andric reverse(BidirectionalIterator first, BidirectionalIterator last); 7740b57cec5SDimitry Andric 7750b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class OutputIterator> 7760b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 7770b57cec5SDimitry Andric reverse_copy(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result); 7780b57cec5SDimitry Andric 7790b57cec5SDimitry Andrictemplate <class ForwardIterator> 780e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 7810b57cec5SDimitry Andric rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last); 7820b57cec5SDimitry Andric 7830b57cec5SDimitry Andrictemplate <class ForwardIterator, class OutputIterator> 784e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 7850b57cec5SDimitry Andric rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result); 7860b57cec5SDimitry Andric 7870b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 7880b57cec5SDimitry Andric void 7890b57cec5SDimitry Andric random_shuffle(RandomAccessIterator first, RandomAccessIterator last); // deprecated in C++14, removed in C++17 7900b57cec5SDimitry Andric 7910b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class RandomNumberGenerator> 7920b57cec5SDimitry Andric void 7930b57cec5SDimitry Andric random_shuffle(RandomAccessIterator first, RandomAccessIterator last, 7940b57cec5SDimitry Andric RandomNumberGenerator& rand); // deprecated in C++14, removed in C++17 7950b57cec5SDimitry Andric 7960b57cec5SDimitry Andrictemplate<class PopulationIterator, class SampleIterator, 7970b57cec5SDimitry Andric class Distance, class UniformRandomBitGenerator> 7980b57cec5SDimitry Andric SampleIterator sample(PopulationIterator first, PopulationIterator last, 7990b57cec5SDimitry Andric SampleIterator out, Distance n, 8000b57cec5SDimitry Andric UniformRandomBitGenerator&& g); // C++17 8010b57cec5SDimitry Andric 8020b57cec5SDimitry Andrictemplate<class RandomAccessIterator, class UniformRandomNumberGenerator> 8030b57cec5SDimitry Andric void shuffle(RandomAccessIterator first, RandomAccessIterator last, 8040b57cec5SDimitry Andric UniformRandomNumberGenerator&& g); 8050b57cec5SDimitry Andric 806e8d8bef9SDimitry Andrictemplate<class ForwardIterator> 807e8d8bef9SDimitry Andric constexpr ForwardIterator 808e8d8bef9SDimitry Andric shift_left(ForwardIterator first, ForwardIterator last, 809e8d8bef9SDimitry Andric typename iterator_traits<ForwardIterator>::difference_type n); // C++20 810e8d8bef9SDimitry Andric 811e8d8bef9SDimitry Andrictemplate<class ForwardIterator> 812e8d8bef9SDimitry Andric constexpr ForwardIterator 813e8d8bef9SDimitry Andric shift_right(ForwardIterator first, ForwardIterator last, 814e8d8bef9SDimitry Andric typename iterator_traits<ForwardIterator>::difference_type n); // C++20 815e8d8bef9SDimitry Andric 8160b57cec5SDimitry Andrictemplate <class InputIterator, class Predicate> 8170b57cec5SDimitry Andric constexpr bool // constexpr in C++20 8180b57cec5SDimitry Andric is_partitioned(InputIterator first, InputIterator last, Predicate pred); 8190b57cec5SDimitry Andric 8200b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 821e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++20 8220b57cec5SDimitry Andric partition(ForwardIterator first, ForwardIterator last, Predicate pred); 8230b57cec5SDimitry Andric 8240b57cec5SDimitry Andrictemplate <class InputIterator, class OutputIterator1, 8250b57cec5SDimitry Andric class OutputIterator2, class Predicate> 8260b57cec5SDimitry Andric constexpr pair<OutputIterator1, OutputIterator2> // constexpr in C++20 8270b57cec5SDimitry Andric partition_copy(InputIterator first, InputIterator last, 8280b57cec5SDimitry Andric OutputIterator1 out_true, OutputIterator2 out_false, 8290b57cec5SDimitry Andric Predicate pred); 8300b57cec5SDimitry Andric 8310b57cec5SDimitry Andrictemplate <class ForwardIterator, class Predicate> 8320b57cec5SDimitry Andric ForwardIterator 8330b57cec5SDimitry Andric stable_partition(ForwardIterator first, ForwardIterator last, Predicate pred); 8340b57cec5SDimitry Andric 8350b57cec5SDimitry Andrictemplate<class ForwardIterator, class Predicate> 8360b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 8370b57cec5SDimitry Andric partition_point(ForwardIterator first, ForwardIterator last, Predicate pred); 8380b57cec5SDimitry Andric 8390b57cec5SDimitry Andrictemplate <class ForwardIterator> 8400b57cec5SDimitry Andric constexpr bool // constexpr in C++20 8410b57cec5SDimitry Andric is_sorted(ForwardIterator first, ForwardIterator last); 8420b57cec5SDimitry Andric 8430b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 844e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 8450b57cec5SDimitry Andric is_sorted(ForwardIterator first, ForwardIterator last, Compare comp); 8460b57cec5SDimitry Andric 8470b57cec5SDimitry Andrictemplate<class ForwardIterator> 8480b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 8490b57cec5SDimitry Andric is_sorted_until(ForwardIterator first, ForwardIterator last); 8500b57cec5SDimitry Andric 8510b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 8520b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 8530b57cec5SDimitry Andric is_sorted_until(ForwardIterator first, ForwardIterator last, Compare comp); 8540b57cec5SDimitry Andric 8550b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 856fe6060f1SDimitry Andric constexpr void // constexpr in C++20 8570b57cec5SDimitry Andric sort(RandomAccessIterator first, RandomAccessIterator last); 8580b57cec5SDimitry Andric 8590b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 860fe6060f1SDimitry Andric constexpr void // constexpr in C++20 8610b57cec5SDimitry Andric sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 8620b57cec5SDimitry Andric 8630b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 8640b57cec5SDimitry Andric void 8650b57cec5SDimitry Andric stable_sort(RandomAccessIterator first, RandomAccessIterator last); 8660b57cec5SDimitry Andric 8670b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 8680b57cec5SDimitry Andric void 8690b57cec5SDimitry Andric stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 8700b57cec5SDimitry Andric 8710b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 872fe6060f1SDimitry Andric constexpr void // constexpr in C++20 8730b57cec5SDimitry Andric partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last); 8740b57cec5SDimitry Andric 8750b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 876fe6060f1SDimitry Andric constexpr void // constexpr in C++20 8770b57cec5SDimitry Andric partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp); 8780b57cec5SDimitry Andric 8790b57cec5SDimitry Andrictemplate <class InputIterator, class RandomAccessIterator> 880fe6060f1SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 8810b57cec5SDimitry Andric partial_sort_copy(InputIterator first, InputIterator last, 8820b57cec5SDimitry Andric RandomAccessIterator result_first, RandomAccessIterator result_last); 8830b57cec5SDimitry Andric 8840b57cec5SDimitry Andrictemplate <class InputIterator, class RandomAccessIterator, class Compare> 885fe6060f1SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 8860b57cec5SDimitry Andric partial_sort_copy(InputIterator first, InputIterator last, 8870b57cec5SDimitry Andric RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp); 8880b57cec5SDimitry Andric 8890b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 890fe6060f1SDimitry Andric constexpr void // constexpr in C++20 8910b57cec5SDimitry Andric nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last); 8920b57cec5SDimitry Andric 8930b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 894fe6060f1SDimitry Andric constexpr void // constexpr in C++20 8950b57cec5SDimitry Andric nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp); 8960b57cec5SDimitry Andric 8970b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 8980b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 8990b57cec5SDimitry Andric lower_bound(ForwardIterator first, ForwardIterator last, const T& value); 9000b57cec5SDimitry Andric 9010b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 9020b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 9030b57cec5SDimitry Andric lower_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 9040b57cec5SDimitry Andric 9050b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 9060b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 9070b57cec5SDimitry Andric upper_bound(ForwardIterator first, ForwardIterator last, const T& value); 9080b57cec5SDimitry Andric 9090b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 9100b57cec5SDimitry Andric constexpr ForwardIterator // constexpr in C++20 9110b57cec5SDimitry Andric upper_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 9120b57cec5SDimitry Andric 9130b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 9140b57cec5SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 9150b57cec5SDimitry Andric equal_range(ForwardIterator first, ForwardIterator last, const T& value); 9160b57cec5SDimitry Andric 9170b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 9180b57cec5SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 9190b57cec5SDimitry Andric equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 9200b57cec5SDimitry Andric 9210b57cec5SDimitry Andrictemplate <class ForwardIterator, class T> 9220b57cec5SDimitry Andric constexpr bool // constexpr in C++20 9230b57cec5SDimitry Andric binary_search(ForwardIterator first, ForwardIterator last, const T& value); 9240b57cec5SDimitry Andric 9250b57cec5SDimitry Andrictemplate <class ForwardIterator, class T, class Compare> 9260b57cec5SDimitry Andric constexpr bool // constexpr in C++20 9270b57cec5SDimitry Andric binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 9280b57cec5SDimitry Andric 9290b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 930e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 9310b57cec5SDimitry Andric merge(InputIterator1 first1, InputIterator1 last1, 9320b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 9330b57cec5SDimitry Andric 9340b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 935e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 9360b57cec5SDimitry Andric merge(InputIterator1 first1, InputIterator1 last1, 9370b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 9380b57cec5SDimitry Andric 9390b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 9400b57cec5SDimitry Andric void 9410b57cec5SDimitry Andric inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); 9420b57cec5SDimitry Andric 9430b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 9440b57cec5SDimitry Andric void 9450b57cec5SDimitry Andric inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp); 9460b57cec5SDimitry Andric 9470b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 9480b57cec5SDimitry Andric constexpr bool // constexpr in C++20 9490b57cec5SDimitry Andric includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 9500b57cec5SDimitry Andric 9510b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class Compare> 9520b57cec5SDimitry Andric constexpr bool // constexpr in C++20 9530b57cec5SDimitry Andric includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp); 9540b57cec5SDimitry Andric 9550b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 956e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 9570b57cec5SDimitry Andric set_union(InputIterator1 first1, InputIterator1 last1, 9580b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 9590b57cec5SDimitry Andric 9600b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 961e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 9620b57cec5SDimitry Andric set_union(InputIterator1 first1, InputIterator1 last1, 9630b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 9640b57cec5SDimitry Andric 9650b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 9660b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 9670b57cec5SDimitry Andric set_intersection(InputIterator1 first1, InputIterator1 last1, 9680b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 9690b57cec5SDimitry Andric 9700b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 9710b57cec5SDimitry Andric constexpr OutputIterator // constexpr in C++20 9720b57cec5SDimitry Andric set_intersection(InputIterator1 first1, InputIterator1 last1, 9730b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 9740b57cec5SDimitry Andric 9750b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 976e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 9770b57cec5SDimitry Andric set_difference(InputIterator1 first1, InputIterator1 last1, 9780b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 9790b57cec5SDimitry Andric 9800b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 981e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 9820b57cec5SDimitry Andric set_difference(InputIterator1 first1, InputIterator1 last1, 9830b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 9840b57cec5SDimitry Andric 9850b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator> 986e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 9870b57cec5SDimitry Andric set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 9880b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result); 9890b57cec5SDimitry Andric 9900b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 991e8d8bef9SDimitry Andric constexpr OutputIterator // constexpr in C++20 9920b57cec5SDimitry Andric set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 9930b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 9940b57cec5SDimitry Andric 9950b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 996fe6060f1SDimitry Andric constexpr void // constexpr in C++20 9970b57cec5SDimitry Andric push_heap(RandomAccessIterator first, RandomAccessIterator last); 9980b57cec5SDimitry Andric 9990b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 1000fe6060f1SDimitry Andric constexpr void // constexpr in C++20 10010b57cec5SDimitry Andric push_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 10020b57cec5SDimitry Andric 10030b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 1004fe6060f1SDimitry Andric constexpr void // constexpr in C++20 10050b57cec5SDimitry Andric pop_heap(RandomAccessIterator first, RandomAccessIterator last); 10060b57cec5SDimitry Andric 10070b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 1008fe6060f1SDimitry Andric constexpr void // constexpr in C++20 10090b57cec5SDimitry Andric pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 10100b57cec5SDimitry Andric 10110b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 1012fe6060f1SDimitry Andric constexpr void // constexpr in C++20 10130b57cec5SDimitry Andric make_heap(RandomAccessIterator first, RandomAccessIterator last); 10140b57cec5SDimitry Andric 10150b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 1016fe6060f1SDimitry Andric constexpr void // constexpr in C++20 10170b57cec5SDimitry Andric make_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 10180b57cec5SDimitry Andric 10190b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 1020fe6060f1SDimitry Andric constexpr void // constexpr in C++20 10210b57cec5SDimitry Andric sort_heap(RandomAccessIterator first, RandomAccessIterator last); 10220b57cec5SDimitry Andric 10230b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 1024fe6060f1SDimitry Andric constexpr void // constexpr in C++20 10250b57cec5SDimitry Andric sort_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 10260b57cec5SDimitry Andric 10270b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 10280b57cec5SDimitry Andric constexpr bool // constexpr in C++20 10290b57cec5SDimitry Andric is_heap(RandomAccessIterator first, RandomAccessiterator last); 10300b57cec5SDimitry Andric 10310b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 10320b57cec5SDimitry Andric constexpr bool // constexpr in C++20 10330b57cec5SDimitry Andric is_heap(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 10340b57cec5SDimitry Andric 10350b57cec5SDimitry Andrictemplate <class RandomAccessIterator> 10360b57cec5SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 10370b57cec5SDimitry Andric is_heap_until(RandomAccessIterator first, RandomAccessiterator last); 10380b57cec5SDimitry Andric 10390b57cec5SDimitry Andrictemplate <class RandomAccessIterator, class Compare> 10400b57cec5SDimitry Andric constexpr RandomAccessIterator // constexpr in C++20 10410b57cec5SDimitry Andric is_heap_until(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 10420b57cec5SDimitry Andric 10430b57cec5SDimitry Andrictemplate <class ForwardIterator> 1044e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 1045e8d8bef9SDimitry Andric min_element(ForwardIterator first, ForwardIterator last); 10460b57cec5SDimitry Andric 10470b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 1048e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 1049e8d8bef9SDimitry Andric min_element(ForwardIterator first, ForwardIterator last, Compare comp); 10500b57cec5SDimitry Andric 10510b57cec5SDimitry Andrictemplate <class T> 1052e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 1053e8d8bef9SDimitry Andric min(const T& a, const T& b); 10540b57cec5SDimitry Andric 10550b57cec5SDimitry Andrictemplate <class T, class Compare> 1056e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 1057e8d8bef9SDimitry Andric min(const T& a, const T& b, Compare comp); 10580b57cec5SDimitry Andric 10590b57cec5SDimitry Andrictemplate<class T> 1060e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 1061e8d8bef9SDimitry Andric min(initializer_list<T> t); 10620b57cec5SDimitry Andric 10630b57cec5SDimitry Andrictemplate<class T, class Compare> 1064e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 1065e8d8bef9SDimitry Andric min(initializer_list<T> t, Compare comp); 10660b57cec5SDimitry Andric 10670b57cec5SDimitry Andrictemplate<class T> 10680b57cec5SDimitry Andric constexpr const T& clamp(const T& v, const T& lo, const T& hi); // C++17 10690b57cec5SDimitry Andric 10700b57cec5SDimitry Andrictemplate<class T, class Compare> 10710b57cec5SDimitry Andric constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp); // C++17 10720b57cec5SDimitry Andric 10730b57cec5SDimitry Andrictemplate <class ForwardIterator> 1074e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 1075e8d8bef9SDimitry Andric max_element(ForwardIterator first, ForwardIterator last); 10760b57cec5SDimitry Andric 10770b57cec5SDimitry Andrictemplate <class ForwardIterator, class Compare> 1078e8d8bef9SDimitry Andric constexpr ForwardIterator // constexpr in C++14 1079e8d8bef9SDimitry Andric max_element(ForwardIterator first, ForwardIterator last, Compare comp); 10800b57cec5SDimitry Andric 10810b57cec5SDimitry Andrictemplate <class T> 1082e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 1083e8d8bef9SDimitry Andric max(const T& a, const T& b); 10840b57cec5SDimitry Andric 10850b57cec5SDimitry Andrictemplate <class T, class Compare> 1086e8d8bef9SDimitry Andric constexpr const T& // constexpr in C++14 1087e8d8bef9SDimitry Andric max(const T& a, const T& b, Compare comp); 10880b57cec5SDimitry Andric 10890b57cec5SDimitry Andrictemplate<class T> 1090e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 1091e8d8bef9SDimitry Andric max(initializer_list<T> t); 10920b57cec5SDimitry Andric 10930b57cec5SDimitry Andrictemplate<class T, class Compare> 1094e8d8bef9SDimitry Andric constexpr T // constexpr in C++14 1095e8d8bef9SDimitry Andric max(initializer_list<T> t, Compare comp); 10960b57cec5SDimitry Andric 10970b57cec5SDimitry Andrictemplate<class ForwardIterator> 1098e8d8bef9SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 1099e8d8bef9SDimitry Andric minmax_element(ForwardIterator first, ForwardIterator last); 11000b57cec5SDimitry Andric 11010b57cec5SDimitry Andrictemplate<class ForwardIterator, class Compare> 1102e8d8bef9SDimitry Andric constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 1103e8d8bef9SDimitry Andric minmax_element(ForwardIterator first, ForwardIterator last, Compare comp); 11040b57cec5SDimitry Andric 11050b57cec5SDimitry Andrictemplate<class T> 1106e8d8bef9SDimitry Andric constexpr pair<const T&, const T&> // constexpr in C++14 1107e8d8bef9SDimitry Andric minmax(const T& a, const T& b); 11080b57cec5SDimitry Andric 11090b57cec5SDimitry Andrictemplate<class T, class Compare> 1110e8d8bef9SDimitry Andric constexpr pair<const T&, const T&> // constexpr in C++14 1111e8d8bef9SDimitry Andric minmax(const T& a, const T& b, Compare comp); 11120b57cec5SDimitry Andric 11130b57cec5SDimitry Andrictemplate<class T> 1114e8d8bef9SDimitry Andric constexpr pair<T, T> // constexpr in C++14 1115e8d8bef9SDimitry Andric minmax(initializer_list<T> t); 11160b57cec5SDimitry Andric 11170b57cec5SDimitry Andrictemplate<class T, class Compare> 1118e8d8bef9SDimitry Andric constexpr pair<T, T> // constexpr in C++14 1119e8d8bef9SDimitry Andric minmax(initializer_list<T> t, Compare comp); 11200b57cec5SDimitry Andric 11210b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2> 11220b57cec5SDimitry Andric constexpr bool // constexpr in C++20 11230b57cec5SDimitry Andric lexicographical_compare(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 11240b57cec5SDimitry Andric 11250b57cec5SDimitry Andrictemplate <class InputIterator1, class InputIterator2, class Compare> 11260b57cec5SDimitry Andric constexpr bool // constexpr in C++20 11270b57cec5SDimitry Andric lexicographical_compare(InputIterator1 first1, InputIterator1 last1, 11280b57cec5SDimitry Andric InputIterator2 first2, InputIterator2 last2, Compare comp); 11290b57cec5SDimitry Andric 11300b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 1131e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 11320b57cec5SDimitry Andric next_permutation(BidirectionalIterator first, BidirectionalIterator last); 11330b57cec5SDimitry Andric 11340b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 1135e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 11360b57cec5SDimitry Andric next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 11370b57cec5SDimitry Andric 11380b57cec5SDimitry Andrictemplate <class BidirectionalIterator> 1139e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 11400b57cec5SDimitry Andric prev_permutation(BidirectionalIterator first, BidirectionalIterator last); 11410b57cec5SDimitry Andric 11420b57cec5SDimitry Andrictemplate <class BidirectionalIterator, class Compare> 1143e8d8bef9SDimitry Andric constexpr bool // constexpr in C++20 11440b57cec5SDimitry Andric prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 11450b57cec5SDimitry Andric} // std 11460b57cec5SDimitry Andric 11470b57cec5SDimitry Andric*/ 11480b57cec5SDimitry Andric 1149*81ad6265SDimitry Andric#include <__assert> // all public C++ headers provide the assertion handler 1150*81ad6265SDimitry Andric#include <__bits> 11510b57cec5SDimitry Andric#include <__config> 1152fe6060f1SDimitry Andric#include <__debug> 1153fe6060f1SDimitry Andric#include <cstddef> 11540b57cec5SDimitry Andric#include <cstring> 1155fe6060f1SDimitry Andric#include <memory> 1156fe6060f1SDimitry Andric#include <type_traits> 11570b57cec5SDimitry Andric#include <version> 11580b57cec5SDimitry Andric 1159fe6060f1SDimitry Andric#include <__algorithm/adjacent_find.h> 1160fe6060f1SDimitry Andric#include <__algorithm/all_of.h> 1161fe6060f1SDimitry Andric#include <__algorithm/any_of.h> 1162fe6060f1SDimitry Andric#include <__algorithm/binary_search.h> 1163fe6060f1SDimitry Andric#include <__algorithm/clamp.h> 1164fe6060f1SDimitry Andric#include <__algorithm/comp.h> 1165fe6060f1SDimitry Andric#include <__algorithm/comp_ref_type.h> 1166fe6060f1SDimitry Andric#include <__algorithm/copy.h> 1167fe6060f1SDimitry Andric#include <__algorithm/copy_backward.h> 1168fe6060f1SDimitry Andric#include <__algorithm/copy_if.h> 1169fe6060f1SDimitry Andric#include <__algorithm/copy_n.h> 1170fe6060f1SDimitry Andric#include <__algorithm/count.h> 1171fe6060f1SDimitry Andric#include <__algorithm/count_if.h> 1172fe6060f1SDimitry Andric#include <__algorithm/equal.h> 1173fe6060f1SDimitry Andric#include <__algorithm/equal_range.h> 1174fe6060f1SDimitry Andric#include <__algorithm/fill.h> 117504eeddc0SDimitry Andric#include <__algorithm/fill_n.h> 1176fe6060f1SDimitry Andric#include <__algorithm/find.h> 1177fe6060f1SDimitry Andric#include <__algorithm/find_end.h> 1178fe6060f1SDimitry Andric#include <__algorithm/find_first_of.h> 1179fe6060f1SDimitry Andric#include <__algorithm/find_if.h> 1180fe6060f1SDimitry Andric#include <__algorithm/find_if_not.h> 1181fe6060f1SDimitry Andric#include <__algorithm/for_each.h> 1182fe6060f1SDimitry Andric#include <__algorithm/for_each_n.h> 1183fe6060f1SDimitry Andric#include <__algorithm/generate.h> 118404eeddc0SDimitry Andric#include <__algorithm/generate_n.h> 1185fe6060f1SDimitry Andric#include <__algorithm/half_positive.h> 1186*81ad6265SDimitry Andric#include <__algorithm/in_found_result.h> 1187*81ad6265SDimitry Andric#include <__algorithm/in_fun_result.h> 11881fd87a68SDimitry Andric#include <__algorithm/in_in_out_result.h> 118904eeddc0SDimitry Andric#include <__algorithm/in_in_result.h> 1190*81ad6265SDimitry Andric#include <__algorithm/in_out_out_result.h> 119104eeddc0SDimitry Andric#include <__algorithm/in_out_result.h> 1192fe6060f1SDimitry Andric#include <__algorithm/includes.h> 1193fe6060f1SDimitry Andric#include <__algorithm/inplace_merge.h> 1194fe6060f1SDimitry Andric#include <__algorithm/is_heap.h> 1195fe6060f1SDimitry Andric#include <__algorithm/is_heap_until.h> 1196fe6060f1SDimitry Andric#include <__algorithm/is_partitioned.h> 1197fe6060f1SDimitry Andric#include <__algorithm/is_permutation.h> 1198fe6060f1SDimitry Andric#include <__algorithm/is_sorted.h> 1199fe6060f1SDimitry Andric#include <__algorithm/is_sorted_until.h> 1200fe6060f1SDimitry Andric#include <__algorithm/iter_swap.h> 1201fe6060f1SDimitry Andric#include <__algorithm/lexicographical_compare.h> 1202fe6060f1SDimitry Andric#include <__algorithm/lower_bound.h> 1203fe6060f1SDimitry Andric#include <__algorithm/make_heap.h> 1204fe6060f1SDimitry Andric#include <__algorithm/max.h> 1205fe6060f1SDimitry Andric#include <__algorithm/max_element.h> 1206fe6060f1SDimitry Andric#include <__algorithm/merge.h> 1207fe6060f1SDimitry Andric#include <__algorithm/min.h> 1208fe6060f1SDimitry Andric#include <__algorithm/min_element.h> 1209*81ad6265SDimitry Andric#include <__algorithm/min_max_result.h> 1210fe6060f1SDimitry Andric#include <__algorithm/minmax.h> 1211fe6060f1SDimitry Andric#include <__algorithm/minmax_element.h> 1212fe6060f1SDimitry Andric#include <__algorithm/mismatch.h> 1213fe6060f1SDimitry Andric#include <__algorithm/move.h> 1214fe6060f1SDimitry Andric#include <__algorithm/move_backward.h> 1215fe6060f1SDimitry Andric#include <__algorithm/next_permutation.h> 1216fe6060f1SDimitry Andric#include <__algorithm/none_of.h> 1217fe6060f1SDimitry Andric#include <__algorithm/nth_element.h> 1218fe6060f1SDimitry Andric#include <__algorithm/partial_sort.h> 1219fe6060f1SDimitry Andric#include <__algorithm/partial_sort_copy.h> 1220fe6060f1SDimitry Andric#include <__algorithm/partition.h> 1221fe6060f1SDimitry Andric#include <__algorithm/partition_copy.h> 1222fe6060f1SDimitry Andric#include <__algorithm/partition_point.h> 1223fe6060f1SDimitry Andric#include <__algorithm/pop_heap.h> 1224fe6060f1SDimitry Andric#include <__algorithm/prev_permutation.h> 1225fe6060f1SDimitry Andric#include <__algorithm/push_heap.h> 1226*81ad6265SDimitry Andric#include <__algorithm/ranges_adjacent_find.h> 1227*81ad6265SDimitry Andric#include <__algorithm/ranges_all_of.h> 1228*81ad6265SDimitry Andric#include <__algorithm/ranges_any_of.h> 1229*81ad6265SDimitry Andric#include <__algorithm/ranges_binary_search.h> 1230*81ad6265SDimitry Andric#include <__algorithm/ranges_copy.h> 1231*81ad6265SDimitry Andric#include <__algorithm/ranges_copy_backward.h> 1232*81ad6265SDimitry Andric#include <__algorithm/ranges_copy_if.h> 1233*81ad6265SDimitry Andric#include <__algorithm/ranges_copy_n.h> 1234*81ad6265SDimitry Andric#include <__algorithm/ranges_count.h> 1235*81ad6265SDimitry Andric#include <__algorithm/ranges_count_if.h> 1236*81ad6265SDimitry Andric#include <__algorithm/ranges_equal.h> 1237*81ad6265SDimitry Andric#include <__algorithm/ranges_fill.h> 1238*81ad6265SDimitry Andric#include <__algorithm/ranges_fill_n.h> 1239*81ad6265SDimitry Andric#include <__algorithm/ranges_find.h> 1240*81ad6265SDimitry Andric#include <__algorithm/ranges_find_first_of.h> 1241*81ad6265SDimitry Andric#include <__algorithm/ranges_find_if.h> 1242*81ad6265SDimitry Andric#include <__algorithm/ranges_find_if_not.h> 1243*81ad6265SDimitry Andric#include <__algorithm/ranges_for_each.h> 1244*81ad6265SDimitry Andric#include <__algorithm/ranges_for_each_n.h> 1245*81ad6265SDimitry Andric#include <__algorithm/ranges_is_partitioned.h> 1246*81ad6265SDimitry Andric#include <__algorithm/ranges_is_sorted.h> 1247*81ad6265SDimitry Andric#include <__algorithm/ranges_is_sorted_until.h> 1248*81ad6265SDimitry Andric#include <__algorithm/ranges_lexicographical_compare.h> 1249*81ad6265SDimitry Andric#include <__algorithm/ranges_lower_bound.h> 1250*81ad6265SDimitry Andric#include <__algorithm/ranges_max.h> 1251*81ad6265SDimitry Andric#include <__algorithm/ranges_max_element.h> 1252*81ad6265SDimitry Andric#include <__algorithm/ranges_min.h> 1253*81ad6265SDimitry Andric#include <__algorithm/ranges_min_element.h> 1254*81ad6265SDimitry Andric#include <__algorithm/ranges_minmax.h> 1255*81ad6265SDimitry Andric#include <__algorithm/ranges_minmax_element.h> 1256*81ad6265SDimitry Andric#include <__algorithm/ranges_mismatch.h> 1257*81ad6265SDimitry Andric#include <__algorithm/ranges_move.h> 1258*81ad6265SDimitry Andric#include <__algorithm/ranges_move_backward.h> 1259*81ad6265SDimitry Andric#include <__algorithm/ranges_none_of.h> 1260*81ad6265SDimitry Andric#include <__algorithm/ranges_replace.h> 1261*81ad6265SDimitry Andric#include <__algorithm/ranges_replace_if.h> 1262*81ad6265SDimitry Andric#include <__algorithm/ranges_reverse.h> 1263*81ad6265SDimitry Andric#include <__algorithm/ranges_sort.h> 1264*81ad6265SDimitry Andric#include <__algorithm/ranges_stable_sort.h> 1265*81ad6265SDimitry Andric#include <__algorithm/ranges_swap_ranges.h> 1266*81ad6265SDimitry Andric#include <__algorithm/ranges_transform.h> 1267*81ad6265SDimitry Andric#include <__algorithm/ranges_upper_bound.h> 1268fe6060f1SDimitry Andric#include <__algorithm/remove.h> 1269fe6060f1SDimitry Andric#include <__algorithm/remove_copy.h> 1270fe6060f1SDimitry Andric#include <__algorithm/remove_copy_if.h> 1271fe6060f1SDimitry Andric#include <__algorithm/remove_if.h> 1272fe6060f1SDimitry Andric#include <__algorithm/replace.h> 1273fe6060f1SDimitry Andric#include <__algorithm/replace_copy.h> 1274fe6060f1SDimitry Andric#include <__algorithm/replace_copy_if.h> 1275fe6060f1SDimitry Andric#include <__algorithm/replace_if.h> 1276fe6060f1SDimitry Andric#include <__algorithm/reverse.h> 1277fe6060f1SDimitry Andric#include <__algorithm/reverse_copy.h> 1278fe6060f1SDimitry Andric#include <__algorithm/rotate.h> 1279fe6060f1SDimitry Andric#include <__algorithm/rotate_copy.h> 1280fe6060f1SDimitry Andric#include <__algorithm/sample.h> 1281fe6060f1SDimitry Andric#include <__algorithm/search.h> 1282fe6060f1SDimitry Andric#include <__algorithm/search_n.h> 1283fe6060f1SDimitry Andric#include <__algorithm/set_difference.h> 1284fe6060f1SDimitry Andric#include <__algorithm/set_intersection.h> 1285fe6060f1SDimitry Andric#include <__algorithm/set_symmetric_difference.h> 1286fe6060f1SDimitry Andric#include <__algorithm/set_union.h> 1287fe6060f1SDimitry Andric#include <__algorithm/shift_left.h> 1288fe6060f1SDimitry Andric#include <__algorithm/shift_right.h> 1289fe6060f1SDimitry Andric#include <__algorithm/shuffle.h> 1290fe6060f1SDimitry Andric#include <__algorithm/sift_down.h> 1291fe6060f1SDimitry Andric#include <__algorithm/sort.h> 1292fe6060f1SDimitry Andric#include <__algorithm/sort_heap.h> 1293fe6060f1SDimitry Andric#include <__algorithm/stable_partition.h> 1294fe6060f1SDimitry Andric#include <__algorithm/stable_sort.h> 1295fe6060f1SDimitry Andric#include <__algorithm/swap_ranges.h> 1296fe6060f1SDimitry Andric#include <__algorithm/transform.h> 1297fe6060f1SDimitry Andric#include <__algorithm/unique.h> 129804eeddc0SDimitry Andric#include <__algorithm/unique_copy.h> 1299fe6060f1SDimitry Andric#include <__algorithm/unwrap_iter.h> 1300fe6060f1SDimitry Andric#include <__algorithm/upper_bound.h> 13010b57cec5SDimitry Andric 1302*81ad6265SDimitry Andric#ifndef _LIBCPP_REMOVE_TRANSITIVE_INCLUDES 1303*81ad6265SDimitry Andric# include <chrono> 1304*81ad6265SDimitry Andric# include <iterator> 1305*81ad6265SDimitry Andric# include <utility> 1306*81ad6265SDimitry Andric#endif 1307*81ad6265SDimitry Andric 1308*81ad6265SDimitry Andric// standard-mandated includes 1309*81ad6265SDimitry Andric#include <initializer_list> 1310*81ad6265SDimitry Andric 13110b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 13120b57cec5SDimitry Andric# pragma GCC system_header 13130b57cec5SDimitry Andric#endif 13140b57cec5SDimitry Andric 1315e40139ffSDimitry Andric#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) && _LIBCPP_STD_VER >= 17 1316e40139ffSDimitry Andric# include <__pstl_algorithm> 1317e40139ffSDimitry Andric#endif 1318e40139ffSDimitry Andric 13190b57cec5SDimitry Andric#endif // _LIBCPP_ALGORITHM 1320