1// -*- C++ -*- 2//===----------------------------------------------------------------------===// 3// 4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5// See https://llvm.org/LICENSE.txt for license information. 6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef _LIBCPP_ALGORITHM 11#define _LIBCPP_ALGORITHM 12 13/* 14 algorithm synopsis 15 16#include <initializer_list> 17 18namespace std 19{ 20 21namespace ranges { 22 template <class I, class F> 23 struct in_fun_result; // since C++20 24 25 template <class I1, class I2> 26 struct in_in_result; // since C++20 27 28 template <class I1, class I2, class O> 29 struct in_in_out_result; // since C++20 30 31 template <class I, class O1, class O2> 32 struct in_out_out_result; // since C++20 33 34 template <class I1, class I2> 35 struct min_max_result; // since C++20 36 37 template <class I> 38 struct in_found_result; // since C++20 39 40 template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 41 indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> // since C++20 42 constexpr I min_element(I first, S last, Comp comp = {}, Proj proj = {}); 43 44 template<forward_range R, class Proj = identity, 45 indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> // since C++20 46 constexpr borrowed_iterator_t<R> min_element(R&& r, Comp comp = {}, Proj proj = {}); 47 48 template <input_iterator I1, sentinel_for<_I1> S1, input_iterator I2, sentinel_for<_I2> S2, 49 class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 50 requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 51 constexpr mismatch_result<_I1, _I2> 52 mismatch()(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) // since C++20 53 54 template <input_range R1, input_range R2, 55 class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 56 requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 57 constexpr mismatch_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 58 mismatch(R1&& r1, R2&& r2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) // since C++20 59 60 requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 61 constexpr I find(I first, S last, const T& value, Proj proj = {}); // since C++20 62 63 template<input_range R, class T, class Proj = identity> 64 requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 65 constexpr borrowed_iterator_t<R> 66 find(R&& r, const T& value, Proj proj = {}); // since C++20 67 68 template<input_iterator I, sentinel_for<I> S, class Proj = identity, 69 indirect_unary_predicate<projected<I, Proj>> Pred> 70 constexpr I find_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 71 72 template<input_range R, class Proj = identity, 73 indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 74 constexpr borrowed_iterator_t<R> 75 find_if(R&& r, Pred pred, Proj proj = {}); // since C++20 76 77 template<input_iterator I, sentinel_for<I> S, class Proj = identity, 78 indirect_unary_predicate<projected<I, Proj>> Pred> 79 constexpr I find_if_not(I first, S last, Pred pred, Proj proj = {}); // since C++20 80 81 template<input_range R, class Proj = identity, 82 indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 83 constexpr borrowed_iterator_t<R> 84 find_if_not(R&& r, Pred pred, Proj proj = {}); // since C++20 85 86 template<class T, class Proj = identity, 87 indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 88 constexpr const T& min(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 89 90 template<copyable T, class Proj = identity, 91 indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 92 constexpr T min(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 93 94 template<input_range R, class Proj = identity, 95 indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 96 requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 97 constexpr range_value_t<R> 98 min(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 99 100 template<class T, class Proj = identity, 101 indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 102 constexpr const T& max(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 103 104 template<copyable T, class Proj = identity, 105 indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 106 constexpr T max(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 107 108 template<input_range R, class Proj = identity, 109 indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 110 requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 111 constexpr range_value_t<R> 112 max(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 113 114 template<class I, class O> 115 using unary_transform_result = in_out_result<I, O>; // since C++20 116 117 template<class I1, class I2, class O> 118 using binary_transform_result = in_in_out_result<I1, I2, O>; // since C++20 119 120 template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, 121 copy_constructible F, class Proj = identity> 122 requires indirectly_writable<O, indirect_result_t<F&, projected<I, Proj>>> 123 constexpr ranges::unary_transform_result<I, O> 124 transform(I first1, S last1, O result, F op, Proj proj = {}); // since C++20 125 126 template<input_range R, weakly_incrementable O, copy_constructible F, 127 class Proj = identity> 128 requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>> 129 constexpr ranges::unary_transform_result<borrowed_iterator_t<R>, O> 130 transform(R&& r, O result, F op, Proj proj = {}); // since C++20 131 132 template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 133 weakly_incrementable O, copy_constructible F, class Proj1 = identity, 134 class Proj2 = identity> 135 requires indirectly_writable<O, indirect_result_t<F&, projected<I1, Proj1>, 136 projected<I2, Proj2>>> 137 constexpr ranges::binary_transform_result<I1, I2, O> 138 transform(I1 first1, S1 last1, I2 first2, S2 last2, O result, 139 F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 140 141 template<input_range R1, input_range R2, weakly_incrementable O, 142 copy_constructible F, class Proj1 = identity, class Proj2 = identity> 143 requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>, 144 projected<iterator_t<R2>, Proj2>>> 145 constexpr ranges::binary_transform_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 146 transform(R1&& r1, R2&& r2, O result, 147 F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 148 149 template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity> 150 requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 151 constexpr iter_difference_t<I> 152 count(I first, S last, const T& value, Proj proj = {}); // since C++20 153 154 template<input_range R, class T, class Proj = identity> 155 requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 156 constexpr range_difference_t<R> 157 count(R&& r, const T& value, Proj proj = {}); // since C++20 158 159 template<input_iterator I, sentinel_for<I> S, class Proj = identity, 160 indirect_unary_predicate<projected<I, Proj>> Pred> 161 constexpr iter_difference_t<I> 162 count_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 163 164 template<input_range R, class Proj = identity, 165 indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 166 constexpr range_difference_t<R> 167 count_if(R&& r, Pred pred, Proj proj = {}); // since C++20 168 169 template<class T, class Proj = identity, 170 indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 171 constexpr ranges::minmax_result<const T&> 172 minmax(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 173 174 template<copyable T, class Proj = identity, 175 indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 176 constexpr ranges::minmax_result<T> 177 minmax(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 178 179 template<input_range R, class Proj = identity, 180 indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 181 requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 182 constexpr ranges::minmax_result<range_value_t<R>> 183 minmax(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 184 185 template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 186 indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 187 constexpr ranges::minmax_element_result<I> 188 minmax_element(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 189 190 template<forward_range R, class Proj = identity, 191 indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 192 constexpr ranges::minmax_element_result<borrowed_iterator_t<R>> 193 minmax_element(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 194 195 template<class I, class O> 196 using copy_result = in_out_result<I, O>; // since C++20 197 198 template<class I, class O> 199 using copy_n_result = in_out_result<I, O>; // since C++20 200 201 template<class I, class O> 202 using copy_if_result = in_out_result<I, O>; // since C++20 203 204 template<class I1, class I2> 205 using copy_backward_result = in_out_result<I1, I2>; // since C++20 206 207 template<input_iterator I, sentinel_for<I> S, weakly_incrementable O> 208 requires indirectly_copyable<I, O> 209 constexpr ranges::copy_result<I, O> ranges::copy(I first, S last, O result); // since C++20 210 211 template<input_range R, weakly_incrementable O> 212 requires indirectly_copyable<iterator_t<R>, O> 213 constexpr ranges::copy_result<borrowed_iterator_t<R>, O> ranges::copy(R&& r, O result); // since C++20 214 215 template<input_iterator I, weakly_incrementable O> 216 requires indirectly_copyable<I, O> 217 constexpr ranges::copy_n_result<I, O> 218 ranges::copy_n(I first, iter_difference_t<I> n, O result); // since C++20 219 220 template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity, 221 indirect_unary_predicate<projected<I, Proj>> Pred> 222 requires indirectly_copyable<I, O> 223 constexpr ranges::copy_if_result<I, O> 224 ranges::copy_if(I first, S last, O result, Pred pred, Proj proj = {}); // since C++20 225 226 template<input_range R, weakly_incrementable O, class Proj = identity, 227 indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 228 requires indirectly_copyable<iterator_t<R>, O> 229 constexpr ranges::copy_if_result<borrowed_iterator_t<R>, O> 230 ranges::copy_if(R&& r, O result, Pred pred, Proj proj = {}); // since C++20 231 232 template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2> 233 requires indirectly_copyable<I1, I2> 234 constexpr ranges::copy_backward_result<I1, I2> 235 ranges::copy_backward(I1 first, S1 last, I2 result); // since C++20 236 237 template<bidirectional_range R, bidirectional_iterator I> 238 requires indirectly_copyable<iterator_t<R>, I> 239 constexpr ranges::copy_backward_result<borrowed_iterator_t<R>, I> 240 ranges::copy_backward(R&& r, I result); // since C++20 241 242 template<class I, class F> 243 using for_each_result = in_fun_result<I, F>; // since C++20 244 245 template<input_iterator I, sentinel_for<I> S, class Proj = identity, 246 indirectly_unary_invocable<projected<I, Proj>> Fun> 247 constexpr ranges::for_each_result<I, Fun> 248 ranges::for_each(I first, S last, Fun f, Proj proj = {}); // since C++20 249 250 template<input_range R, class Proj = identity, 251 indirectly_unary_invocable<projected<iterator_t<R>, Proj>> Fun> 252 constexpr ranges::for_each_result<borrowed_iterator_t<R>, Fun> 253 ranges::for_each(R&& r, Fun f, Proj proj = {}); // since C++20 254 255 template<input_iterator I, class Proj = identity, 256 indirectly_unary_invocable<projected<I, Proj>> Fun> 257 constexpr ranges::for_each_n_result<I, Fun> 258 ranges::for_each_n(I first, iter_difference_t<I> n, Fun f, Proj proj = {}); // since C++20 259 260 template<input_iterator I, sentinel_for<I> S, class Proj = identity, 261 indirect_unary_predicate<projected<I, Proj>> Pred> 262 constexpr bool ranges::is_partitioned(I first, S last, Pred pred, Proj proj = {}); // since C++20 263 264 template<input_range R, class Proj = identity, 265 indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 266 constexpr bool ranges::is_partitioned(R&& r, Pred pred, Proj proj = {}); // since C++20 267 268} 269 270 constexpr bool // constexpr in C++20 271 all_of(InputIterator first, InputIterator last, Predicate pred); 272 273template <class InputIterator, class Predicate> 274 constexpr bool // constexpr in C++20 275 any_of(InputIterator first, InputIterator last, Predicate pred); 276 277template <class InputIterator, class Predicate> 278 constexpr bool // constexpr in C++20 279 none_of(InputIterator first, InputIterator last, Predicate pred); 280 281template <class InputIterator, class Function> 282 constexpr Function // constexpr in C++20 283 for_each(InputIterator first, InputIterator last, Function f); 284 285template<class InputIterator, class Size, class Function> 286 constexpr InputIterator // constexpr in C++20 287 for_each_n(InputIterator first, Size n, Function f); // C++17 288 289template <class InputIterator, class T> 290 constexpr InputIterator // constexpr in C++20 291 find(InputIterator first, InputIterator last, const T& value); 292 293template <class InputIterator, class Predicate> 294 constexpr InputIterator // constexpr in C++20 295 find_if(InputIterator first, InputIterator last, Predicate pred); 296 297template<class InputIterator, class Predicate> 298 constexpr InputIterator // constexpr in C++20 299 find_if_not(InputIterator first, InputIterator last, Predicate pred); 300 301template <class ForwardIterator1, class ForwardIterator2> 302 constexpr ForwardIterator1 // constexpr in C++20 303 find_end(ForwardIterator1 first1, ForwardIterator1 last1, 304 ForwardIterator2 first2, ForwardIterator2 last2); 305 306template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 307 constexpr ForwardIterator1 // constexpr in C++20 308 find_end(ForwardIterator1 first1, ForwardIterator1 last1, 309 ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 310 311template <class ForwardIterator1, class ForwardIterator2> 312 constexpr ForwardIterator1 // constexpr in C++20 313 find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 314 ForwardIterator2 first2, ForwardIterator2 last2); 315 316template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 317 constexpr ForwardIterator1 // constexpr in C++20 318 find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 319 ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 320 321template <class ForwardIterator> 322 constexpr ForwardIterator // constexpr in C++20 323 adjacent_find(ForwardIterator first, ForwardIterator last); 324 325template <class ForwardIterator, class BinaryPredicate> 326 constexpr ForwardIterator // constexpr in C++20 327 adjacent_find(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 328 329template <class InputIterator, class T> 330 constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 331 count(InputIterator first, InputIterator last, const T& value); 332 333template <class InputIterator, class Predicate> 334 constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 335 count_if(InputIterator first, InputIterator last, Predicate pred); 336 337template <class InputIterator1, class InputIterator2> 338 constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 339 mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 340 341template <class InputIterator1, class InputIterator2> 342 constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 343 mismatch(InputIterator1 first1, InputIterator1 last1, 344 InputIterator2 first2, InputIterator2 last2); // **C++14** 345 346template <class InputIterator1, class InputIterator2, class BinaryPredicate> 347 constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 348 mismatch(InputIterator1 first1, InputIterator1 last1, 349 InputIterator2 first2, BinaryPredicate pred); 350 351template <class InputIterator1, class InputIterator2, class BinaryPredicate> 352 constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 353 mismatch(InputIterator1 first1, InputIterator1 last1, 354 InputIterator2 first2, InputIterator2 last2, 355 BinaryPredicate pred); // **C++14** 356 357template <class InputIterator1, class InputIterator2> 358 constexpr bool // constexpr in C++20 359 equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 360 361template <class InputIterator1, class InputIterator2> 362 constexpr bool // constexpr in C++20 363 equal(InputIterator1 first1, InputIterator1 last1, 364 InputIterator2 first2, InputIterator2 last2); // **C++14** 365 366template <class InputIterator1, class InputIterator2, class BinaryPredicate> 367 constexpr bool // constexpr in C++20 368 equal(InputIterator1 first1, InputIterator1 last1, 369 InputIterator2 first2, BinaryPredicate pred); 370 371template <class InputIterator1, class InputIterator2, class BinaryPredicate> 372 constexpr bool // constexpr in C++20 373 equal(InputIterator1 first1, InputIterator1 last1, 374 InputIterator2 first2, InputIterator2 last2, 375 BinaryPredicate pred); // **C++14** 376 377template<class ForwardIterator1, class ForwardIterator2> 378 constexpr bool // constexpr in C++20 379 is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 380 ForwardIterator2 first2); 381 382template<class ForwardIterator1, class ForwardIterator2> 383 constexpr bool // constexpr in C++20 384 is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 385 ForwardIterator2 first2, ForwardIterator2 last2); // **C++14** 386 387template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 388 constexpr bool // constexpr in C++20 389 is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 390 ForwardIterator2 first2, BinaryPredicate pred); 391 392template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 393 constexpr bool // constexpr in C++20 394 is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 395 ForwardIterator2 first2, ForwardIterator2 last2, 396 BinaryPredicate pred); // **C++14** 397 398template <class ForwardIterator1, class ForwardIterator2> 399 constexpr ForwardIterator1 // constexpr in C++20 400 search(ForwardIterator1 first1, ForwardIterator1 last1, 401 ForwardIterator2 first2, ForwardIterator2 last2); 402 403template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 404 constexpr ForwardIterator1 // constexpr in C++20 405 search(ForwardIterator1 first1, ForwardIterator1 last1, 406 ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 407 408template <class ForwardIterator, class Size, class T> 409 constexpr ForwardIterator // constexpr in C++20 410 search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value); 411 412template <class ForwardIterator, class Size, class T, class BinaryPredicate> 413 constexpr ForwardIterator // constexpr in C++20 414 search_n(ForwardIterator first, ForwardIterator last, 415 Size count, const T& value, BinaryPredicate pred); 416 417template <class InputIterator, class OutputIterator> 418 constexpr OutputIterator // constexpr in C++20 419 copy(InputIterator first, InputIterator last, OutputIterator result); 420 421template<class InputIterator, class OutputIterator, class Predicate> 422 constexpr OutputIterator // constexpr in C++20 423 copy_if(InputIterator first, InputIterator last, 424 OutputIterator result, Predicate pred); 425 426template<class InputIterator, class Size, class OutputIterator> 427 constexpr OutputIterator // constexpr in C++20 428 copy_n(InputIterator first, Size n, OutputIterator result); 429 430template <class BidirectionalIterator1, class BidirectionalIterator2> 431 constexpr BidirectionalIterator2 // constexpr in C++20 432 copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 433 BidirectionalIterator2 result); 434 435template <class ForwardIterator1, class ForwardIterator2> 436 constexpr ForwardIterator2 // constexpr in C++20 437 swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2); 438 439template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2> 440 requires indirectly_swappable<I1, I2> 441 constexpr ranges::swap_ranges_result<I1, I2> 442 ranges::swap_ranges(I1 first1, S1 last1, I2 first2, S2 last2); 443 444template<input_range R1, input_range R2> 445 requires indirectly_swappable<iterator_t<R1>, iterator_t<R2>> 446 constexpr ranges::swap_ranges_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 447 ranges::swap_ranges(R1&& r1, R2&& r2); 448 449template <class ForwardIterator1, class ForwardIterator2> 450 constexpr void // constexpr in C++20 451 iter_swap(ForwardIterator1 a, ForwardIterator2 b); 452 453template <class InputIterator, class OutputIterator, class UnaryOperation> 454 constexpr OutputIterator // constexpr in C++20 455 transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op); 456 457template <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation> 458 constexpr OutputIterator // constexpr in C++20 459 transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 460 OutputIterator result, BinaryOperation binary_op); 461 462template <class ForwardIterator, class T> 463 constexpr void // constexpr in C++20 464 replace(ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value); 465 466template <class ForwardIterator, class Predicate, class T> 467 constexpr void // constexpr in C++20 468 replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, const T& new_value); 469 470template <class InputIterator, class OutputIterator, class T> 471 constexpr OutputIterator // constexpr in C++20 472 replace_copy(InputIterator first, InputIterator last, OutputIterator result, 473 const T& old_value, const T& new_value); 474 475template <class InputIterator, class OutputIterator, class Predicate, class T> 476 constexpr OutputIterator // constexpr in C++20 477 replace_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value); 478 479template <class ForwardIterator, class T> 480 constexpr void // constexpr in C++20 481 fill(ForwardIterator first, ForwardIterator last, const T& value); 482 483template <class OutputIterator, class Size, class T> 484 constexpr OutputIterator // constexpr in C++20 485 fill_n(OutputIterator first, Size n, const T& value); 486 487template <class ForwardIterator, class Generator> 488 constexpr void // constexpr in C++20 489 generate(ForwardIterator first, ForwardIterator last, Generator gen); 490 491template <class OutputIterator, class Size, class Generator> 492 constexpr OutputIterator // constexpr in C++20 493 generate_n(OutputIterator first, Size n, Generator gen); 494 495template <class ForwardIterator, class T> 496 constexpr ForwardIterator // constexpr in C++20 497 remove(ForwardIterator first, ForwardIterator last, const T& value); 498 499template <class ForwardIterator, class Predicate> 500 constexpr ForwardIterator // constexpr in C++20 501 remove_if(ForwardIterator first, ForwardIterator last, Predicate pred); 502 503template <class InputIterator, class OutputIterator, class T> 504 constexpr OutputIterator // constexpr in C++20 505 remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value); 506 507template <class InputIterator, class OutputIterator, class Predicate> 508 constexpr OutputIterator // constexpr in C++20 509 remove_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred); 510 511template <class ForwardIterator> 512 constexpr ForwardIterator // constexpr in C++20 513 unique(ForwardIterator first, ForwardIterator last); 514 515template <class ForwardIterator, class BinaryPredicate> 516 constexpr ForwardIterator // constexpr in C++20 517 unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 518 519template <class InputIterator, class OutputIterator> 520 constexpr OutputIterator // constexpr in C++20 521 unique_copy(InputIterator first, InputIterator last, OutputIterator result); 522 523template <class InputIterator, class OutputIterator, class BinaryPredicate> 524 constexpr OutputIterator // constexpr in C++20 525 unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred); 526 527template <class BidirectionalIterator> 528 constexpr void // constexpr in C++20 529 reverse(BidirectionalIterator first, BidirectionalIterator last); 530 531template <class BidirectionalIterator, class OutputIterator> 532 constexpr OutputIterator // constexpr in C++20 533 reverse_copy(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result); 534 535template <class ForwardIterator> 536 constexpr ForwardIterator // constexpr in C++20 537 rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last); 538 539template <class ForwardIterator, class OutputIterator> 540 constexpr OutputIterator // constexpr in C++20 541 rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result); 542 543template <class RandomAccessIterator> 544 void 545 random_shuffle(RandomAccessIterator first, RandomAccessIterator last); // deprecated in C++14, removed in C++17 546 547template <class RandomAccessIterator, class RandomNumberGenerator> 548 void 549 random_shuffle(RandomAccessIterator first, RandomAccessIterator last, 550 RandomNumberGenerator& rand); // deprecated in C++14, removed in C++17 551 552template<class PopulationIterator, class SampleIterator, 553 class Distance, class UniformRandomBitGenerator> 554 SampleIterator sample(PopulationIterator first, PopulationIterator last, 555 SampleIterator out, Distance n, 556 UniformRandomBitGenerator&& g); // C++17 557 558template<class RandomAccessIterator, class UniformRandomNumberGenerator> 559 void shuffle(RandomAccessIterator first, RandomAccessIterator last, 560 UniformRandomNumberGenerator&& g); 561 562template<class ForwardIterator> 563 constexpr ForwardIterator 564 shift_left(ForwardIterator first, ForwardIterator last, 565 typename iterator_traits<ForwardIterator>::difference_type n); // C++20 566 567template<class ForwardIterator> 568 constexpr ForwardIterator 569 shift_right(ForwardIterator first, ForwardIterator last, 570 typename iterator_traits<ForwardIterator>::difference_type n); // C++20 571 572template <class InputIterator, class Predicate> 573 constexpr bool // constexpr in C++20 574 is_partitioned(InputIterator first, InputIterator last, Predicate pred); 575 576template <class ForwardIterator, class Predicate> 577 constexpr ForwardIterator // constexpr in C++20 578 partition(ForwardIterator first, ForwardIterator last, Predicate pred); 579 580template <class InputIterator, class OutputIterator1, 581 class OutputIterator2, class Predicate> 582 constexpr pair<OutputIterator1, OutputIterator2> // constexpr in C++20 583 partition_copy(InputIterator first, InputIterator last, 584 OutputIterator1 out_true, OutputIterator2 out_false, 585 Predicate pred); 586 587template <class ForwardIterator, class Predicate> 588 ForwardIterator 589 stable_partition(ForwardIterator first, ForwardIterator last, Predicate pred); 590 591template<class ForwardIterator, class Predicate> 592 constexpr ForwardIterator // constexpr in C++20 593 partition_point(ForwardIterator first, ForwardIterator last, Predicate pred); 594 595template <class ForwardIterator> 596 constexpr bool // constexpr in C++20 597 is_sorted(ForwardIterator first, ForwardIterator last); 598 599template <class ForwardIterator, class Compare> 600 constexpr bool // constexpr in C++20 601 is_sorted(ForwardIterator first, ForwardIterator last, Compare comp); 602 603template<class ForwardIterator> 604 constexpr ForwardIterator // constexpr in C++20 605 is_sorted_until(ForwardIterator first, ForwardIterator last); 606 607template <class ForwardIterator, class Compare> 608 constexpr ForwardIterator // constexpr in C++20 609 is_sorted_until(ForwardIterator first, ForwardIterator last, Compare comp); 610 611template <class RandomAccessIterator> 612 constexpr void // constexpr in C++20 613 sort(RandomAccessIterator first, RandomAccessIterator last); 614 615template <class RandomAccessIterator, class Compare> 616 constexpr void // constexpr in C++20 617 sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 618 619template <class RandomAccessIterator> 620 void 621 stable_sort(RandomAccessIterator first, RandomAccessIterator last); 622 623template <class RandomAccessIterator, class Compare> 624 void 625 stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 626 627template <class RandomAccessIterator> 628 constexpr void // constexpr in C++20 629 partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last); 630 631template <class RandomAccessIterator, class Compare> 632 constexpr void // constexpr in C++20 633 partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp); 634 635template <class InputIterator, class RandomAccessIterator> 636 constexpr RandomAccessIterator // constexpr in C++20 637 partial_sort_copy(InputIterator first, InputIterator last, 638 RandomAccessIterator result_first, RandomAccessIterator result_last); 639 640template <class InputIterator, class RandomAccessIterator, class Compare> 641 constexpr RandomAccessIterator // constexpr in C++20 642 partial_sort_copy(InputIterator first, InputIterator last, 643 RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp); 644 645template <class RandomAccessIterator> 646 constexpr void // constexpr in C++20 647 nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last); 648 649template <class RandomAccessIterator, class Compare> 650 constexpr void // constexpr in C++20 651 nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp); 652 653template <class ForwardIterator, class T> 654 constexpr ForwardIterator // constexpr in C++20 655 lower_bound(ForwardIterator first, ForwardIterator last, const T& value); 656 657template <class ForwardIterator, class T, class Compare> 658 constexpr ForwardIterator // constexpr in C++20 659 lower_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 660 661template <class ForwardIterator, class T> 662 constexpr ForwardIterator // constexpr in C++20 663 upper_bound(ForwardIterator first, ForwardIterator last, const T& value); 664 665template <class ForwardIterator, class T, class Compare> 666 constexpr ForwardIterator // constexpr in C++20 667 upper_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 668 669template <class ForwardIterator, class T> 670 constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 671 equal_range(ForwardIterator first, ForwardIterator last, const T& value); 672 673template <class ForwardIterator, class T, class Compare> 674 constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 675 equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 676 677template <class ForwardIterator, class T> 678 constexpr bool // constexpr in C++20 679 binary_search(ForwardIterator first, ForwardIterator last, const T& value); 680 681template <class ForwardIterator, class T, class Compare> 682 constexpr bool // constexpr in C++20 683 binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 684 685template <class InputIterator1, class InputIterator2, class OutputIterator> 686 constexpr OutputIterator // constexpr in C++20 687 merge(InputIterator1 first1, InputIterator1 last1, 688 InputIterator2 first2, InputIterator2 last2, OutputIterator result); 689 690template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 691 constexpr OutputIterator // constexpr in C++20 692 merge(InputIterator1 first1, InputIterator1 last1, 693 InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 694 695template <class BidirectionalIterator> 696 void 697 inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); 698 699template <class BidirectionalIterator, class Compare> 700 void 701 inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp); 702 703template <class InputIterator1, class InputIterator2> 704 constexpr bool // constexpr in C++20 705 includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 706 707template <class InputIterator1, class InputIterator2, class Compare> 708 constexpr bool // constexpr in C++20 709 includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp); 710 711template <class InputIterator1, class InputIterator2, class OutputIterator> 712 constexpr OutputIterator // constexpr in C++20 713 set_union(InputIterator1 first1, InputIterator1 last1, 714 InputIterator2 first2, InputIterator2 last2, OutputIterator result); 715 716template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 717 constexpr OutputIterator // constexpr in C++20 718 set_union(InputIterator1 first1, InputIterator1 last1, 719 InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 720 721template <class InputIterator1, class InputIterator2, class OutputIterator> 722 constexpr OutputIterator // constexpr in C++20 723 set_intersection(InputIterator1 first1, InputIterator1 last1, 724 InputIterator2 first2, InputIterator2 last2, OutputIterator result); 725 726template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 727 constexpr OutputIterator // constexpr in C++20 728 set_intersection(InputIterator1 first1, InputIterator1 last1, 729 InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 730 731template <class InputIterator1, class InputIterator2, class OutputIterator> 732 constexpr OutputIterator // constexpr in C++20 733 set_difference(InputIterator1 first1, InputIterator1 last1, 734 InputIterator2 first2, InputIterator2 last2, OutputIterator result); 735 736template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 737 constexpr OutputIterator // constexpr in C++20 738 set_difference(InputIterator1 first1, InputIterator1 last1, 739 InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 740 741template <class InputIterator1, class InputIterator2, class OutputIterator> 742 constexpr OutputIterator // constexpr in C++20 743 set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 744 InputIterator2 first2, InputIterator2 last2, OutputIterator result); 745 746template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 747 constexpr OutputIterator // constexpr in C++20 748 set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 749 InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 750 751template <class RandomAccessIterator> 752 constexpr void // constexpr in C++20 753 push_heap(RandomAccessIterator first, RandomAccessIterator last); 754 755template <class RandomAccessIterator, class Compare> 756 constexpr void // constexpr in C++20 757 push_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 758 759template <class RandomAccessIterator> 760 constexpr void // constexpr in C++20 761 pop_heap(RandomAccessIterator first, RandomAccessIterator last); 762 763template <class RandomAccessIterator, class Compare> 764 constexpr void // constexpr in C++20 765 pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 766 767template <class RandomAccessIterator> 768 constexpr void // constexpr in C++20 769 make_heap(RandomAccessIterator first, RandomAccessIterator last); 770 771template <class RandomAccessIterator, class Compare> 772 constexpr void // constexpr in C++20 773 make_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 774 775template <class RandomAccessIterator> 776 constexpr void // constexpr in C++20 777 sort_heap(RandomAccessIterator first, RandomAccessIterator last); 778 779template <class RandomAccessIterator, class Compare> 780 constexpr void // constexpr in C++20 781 sort_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 782 783template <class RandomAccessIterator> 784 constexpr bool // constexpr in C++20 785 is_heap(RandomAccessIterator first, RandomAccessiterator last); 786 787template <class RandomAccessIterator, class Compare> 788 constexpr bool // constexpr in C++20 789 is_heap(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 790 791template <class RandomAccessIterator> 792 constexpr RandomAccessIterator // constexpr in C++20 793 is_heap_until(RandomAccessIterator first, RandomAccessiterator last); 794 795template <class RandomAccessIterator, class Compare> 796 constexpr RandomAccessIterator // constexpr in C++20 797 is_heap_until(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 798 799template <class ForwardIterator> 800 constexpr ForwardIterator // constexpr in C++14 801 min_element(ForwardIterator first, ForwardIterator last); 802 803template <class ForwardIterator, class Compare> 804 constexpr ForwardIterator // constexpr in C++14 805 min_element(ForwardIterator first, ForwardIterator last, Compare comp); 806 807template <class T> 808 constexpr const T& // constexpr in C++14 809 min(const T& a, const T& b); 810 811template <class T, class Compare> 812 constexpr const T& // constexpr in C++14 813 min(const T& a, const T& b, Compare comp); 814 815template<class T> 816 constexpr T // constexpr in C++14 817 min(initializer_list<T> t); 818 819template<class T, class Compare> 820 constexpr T // constexpr in C++14 821 min(initializer_list<T> t, Compare comp); 822 823template<class T> 824 constexpr const T& clamp(const T& v, const T& lo, const T& hi); // C++17 825 826template<class T, class Compare> 827 constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp); // C++17 828 829template <class ForwardIterator> 830 constexpr ForwardIterator // constexpr in C++14 831 max_element(ForwardIterator first, ForwardIterator last); 832 833template <class ForwardIterator, class Compare> 834 constexpr ForwardIterator // constexpr in C++14 835 max_element(ForwardIterator first, ForwardIterator last, Compare comp); 836 837template <class T> 838 constexpr const T& // constexpr in C++14 839 max(const T& a, const T& b); 840 841template <class T, class Compare> 842 constexpr const T& // constexpr in C++14 843 max(const T& a, const T& b, Compare comp); 844 845template<class T> 846 constexpr T // constexpr in C++14 847 max(initializer_list<T> t); 848 849template<class T, class Compare> 850 constexpr T // constexpr in C++14 851 max(initializer_list<T> t, Compare comp); 852 853template<class ForwardIterator> 854 constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 855 minmax_element(ForwardIterator first, ForwardIterator last); 856 857template<class ForwardIterator, class Compare> 858 constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 859 minmax_element(ForwardIterator first, ForwardIterator last, Compare comp); 860 861template<class T> 862 constexpr pair<const T&, const T&> // constexpr in C++14 863 minmax(const T& a, const T& b); 864 865template<class T, class Compare> 866 constexpr pair<const T&, const T&> // constexpr in C++14 867 minmax(const T& a, const T& b, Compare comp); 868 869template<class T> 870 constexpr pair<T, T> // constexpr in C++14 871 minmax(initializer_list<T> t); 872 873template<class T, class Compare> 874 constexpr pair<T, T> // constexpr in C++14 875 minmax(initializer_list<T> t, Compare comp); 876 877template <class InputIterator1, class InputIterator2> 878 constexpr bool // constexpr in C++20 879 lexicographical_compare(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 880 881template <class InputIterator1, class InputIterator2, class Compare> 882 constexpr bool // constexpr in C++20 883 lexicographical_compare(InputIterator1 first1, InputIterator1 last1, 884 InputIterator2 first2, InputIterator2 last2, Compare comp); 885 886template <class BidirectionalIterator> 887 constexpr bool // constexpr in C++20 888 next_permutation(BidirectionalIterator first, BidirectionalIterator last); 889 890template <class BidirectionalIterator, class Compare> 891 constexpr bool // constexpr in C++20 892 next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 893 894template <class BidirectionalIterator> 895 constexpr bool // constexpr in C++20 896 prev_permutation(BidirectionalIterator first, BidirectionalIterator last); 897 898template <class BidirectionalIterator, class Compare> 899 constexpr bool // constexpr in C++20 900 prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 901} // std 902 903*/ 904 905#include <__assert> // all public C++ headers provide the assertion handler 906#include <__bits> 907#include <__config> 908#include <__debug> 909#include <cstddef> 910#include <cstring> 911#include <initializer_list> 912#include <iterator> 913#include <memory> 914#include <type_traits> 915#include <version> 916 917#include <__algorithm/adjacent_find.h> 918#include <__algorithm/all_of.h> 919#include <__algorithm/any_of.h> 920#include <__algorithm/binary_search.h> 921#include <__algorithm/clamp.h> 922#include <__algorithm/comp.h> 923#include <__algorithm/comp_ref_type.h> 924#include <__algorithm/copy.h> 925#include <__algorithm/copy_backward.h> 926#include <__algorithm/copy_if.h> 927#include <__algorithm/copy_n.h> 928#include <__algorithm/count.h> 929#include <__algorithm/count_if.h> 930#include <__algorithm/equal.h> 931#include <__algorithm/equal_range.h> 932#include <__algorithm/fill.h> 933#include <__algorithm/fill_n.h> 934#include <__algorithm/find.h> 935#include <__algorithm/find_end.h> 936#include <__algorithm/find_first_of.h> 937#include <__algorithm/find_if.h> 938#include <__algorithm/find_if_not.h> 939#include <__algorithm/for_each.h> 940#include <__algorithm/for_each_n.h> 941#include <__algorithm/generate.h> 942#include <__algorithm/generate_n.h> 943#include <__algorithm/half_positive.h> 944#include <__algorithm/in_found_result.h> 945#include <__algorithm/in_fun_result.h> 946#include <__algorithm/in_in_out_result.h> 947#include <__algorithm/in_in_result.h> 948#include <__algorithm/in_out_out_result.h> 949#include <__algorithm/in_out_result.h> 950#include <__algorithm/includes.h> 951#include <__algorithm/inplace_merge.h> 952#include <__algorithm/is_heap.h> 953#include <__algorithm/is_heap_until.h> 954#include <__algorithm/is_partitioned.h> 955#include <__algorithm/is_permutation.h> 956#include <__algorithm/is_sorted.h> 957#include <__algorithm/is_sorted_until.h> 958#include <__algorithm/iter_swap.h> 959#include <__algorithm/lexicographical_compare.h> 960#include <__algorithm/lower_bound.h> 961#include <__algorithm/make_heap.h> 962#include <__algorithm/max.h> 963#include <__algorithm/max_element.h> 964#include <__algorithm/merge.h> 965#include <__algorithm/min.h> 966#include <__algorithm/min_element.h> 967#include <__algorithm/min_max_result.h> 968#include <__algorithm/minmax.h> 969#include <__algorithm/minmax_element.h> 970#include <__algorithm/mismatch.h> 971#include <__algorithm/move.h> 972#include <__algorithm/move_backward.h> 973#include <__algorithm/next_permutation.h> 974#include <__algorithm/none_of.h> 975#include <__algorithm/nth_element.h> 976#include <__algorithm/partial_sort.h> 977#include <__algorithm/partial_sort_copy.h> 978#include <__algorithm/partition.h> 979#include <__algorithm/partition_copy.h> 980#include <__algorithm/partition_point.h> 981#include <__algorithm/pop_heap.h> 982#include <__algorithm/prev_permutation.h> 983#include <__algorithm/push_heap.h> 984#include <__algorithm/ranges_copy.h> 985#include <__algorithm/ranges_copy_backward.h> 986#include <__algorithm/ranges_copy_if.h> 987#include <__algorithm/ranges_copy_n.h> 988#include <__algorithm/ranges_count.h> 989#include <__algorithm/ranges_count_if.h> 990#include <__algorithm/ranges_find.h> 991#include <__algorithm/ranges_find_if.h> 992#include <__algorithm/ranges_find_if_not.h> 993#include <__algorithm/ranges_for_each.h> 994#include <__algorithm/ranges_for_each_n.h> 995#include <__algorithm/ranges_is_partitioned.h> 996#include <__algorithm/ranges_max.h> 997#include <__algorithm/ranges_max_element.h> 998#include <__algorithm/ranges_min.h> 999#include <__algorithm/ranges_min_element.h> 1000#include <__algorithm/ranges_minmax.h> 1001#include <__algorithm/ranges_minmax_element.h> 1002#include <__algorithm/ranges_mismatch.h> 1003#include <__algorithm/ranges_swap_ranges.h> 1004#include <__algorithm/ranges_transform.h> 1005#include <__algorithm/remove.h> 1006#include <__algorithm/remove_copy.h> 1007#include <__algorithm/remove_copy_if.h> 1008#include <__algorithm/remove_if.h> 1009#include <__algorithm/replace.h> 1010#include <__algorithm/replace_copy.h> 1011#include <__algorithm/replace_copy_if.h> 1012#include <__algorithm/replace_if.h> 1013#include <__algorithm/reverse.h> 1014#include <__algorithm/reverse_copy.h> 1015#include <__algorithm/rotate.h> 1016#include <__algorithm/rotate_copy.h> 1017#include <__algorithm/sample.h> 1018#include <__algorithm/search.h> 1019#include <__algorithm/search_n.h> 1020#include <__algorithm/set_difference.h> 1021#include <__algorithm/set_intersection.h> 1022#include <__algorithm/set_symmetric_difference.h> 1023#include <__algorithm/set_union.h> 1024#include <__algorithm/shift_left.h> 1025#include <__algorithm/shift_right.h> 1026#include <__algorithm/shuffle.h> 1027#include <__algorithm/sift_down.h> 1028#include <__algorithm/sort.h> 1029#include <__algorithm/sort_heap.h> 1030#include <__algorithm/stable_partition.h> 1031#include <__algorithm/stable_sort.h> 1032#include <__algorithm/swap_ranges.h> 1033#include <__algorithm/transform.h> 1034#include <__algorithm/unique.h> 1035#include <__algorithm/unique_copy.h> 1036#include <__algorithm/unwrap_iter.h> 1037#include <__algorithm/upper_bound.h> 1038 1039#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1040# pragma GCC system_header 1041#endif 1042 1043#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) && _LIBCPP_STD_VER >= 17 1044# include <__pstl_algorithm> 1045#endif 1046 1047#endif // _LIBCPP_ALGORITHM 1048