30#ifndef _GLIBCXX_ALGORITHMFWD_H
31#define _GLIBCXX_ALGORITHMFWD_H 1
33#pragma GCC system_header
38#if __cplusplus >= 201103L
42namespace std _GLIBCXX_VISIBILITY(default)
44_GLIBCXX_BEGIN_NAMESPACE_VERSION
194#if __cplusplus > 201703L
195# define __cpp_lib_constexpr_algorithms 201806L
198#if __cplusplus >= 201103L
199 template<
typename _IIter,
typename _Predicate>
202 all_of(_IIter, _IIter, _Predicate);
204 template<
typename _IIter,
typename _Predicate>
207 any_of(_IIter, _IIter, _Predicate);
210 template<
typename _FIter,
typename _Tp>
213 binary_search(_FIter, _FIter,
const _Tp&);
215 template<
typename _FIter,
typename _Tp,
typename _Compare>
218 binary_search(_FIter, _FIter,
const _Tp&, _Compare);
220#if __cplusplus > 201402L
221 template<
typename _Tp>
224 clamp(
const _Tp&,
const _Tp&,
const _Tp&);
226 template<
typename _Tp,
typename _Compare>
229 clamp(
const _Tp&,
const _Tp&,
const _Tp&, _Compare);
232 template<
typename _IIter,
typename _OIter>
235 copy(_IIter, _IIter, _OIter);
237 template<
typename _BIter1,
typename _BIter2>
240 copy_backward(_BIter1, _BIter1, _BIter2);
242#if __cplusplus >= 201103L
243 template<
typename _IIter,
typename _OIter,
typename _Predicate>
246 copy_if(_IIter, _IIter, _OIter, _Predicate);
248 template<
typename _IIter,
typename _Size,
typename _OIter>
251 copy_n(_IIter, _Size, _OIter);
257 template<
typename _FIter,
typename _Tp>
260 equal_range(_FIter, _FIter,
const _Tp&);
262 template<
typename _FIter,
typename _Tp,
typename _Compare>
265 equal_range(_FIter, _FIter,
const _Tp&, _Compare);
267 template<
typename _FIter,
typename _Tp>
270 fill(_FIter, _FIter,
const _Tp&);
272 template<
typename _OIter,
typename _Size,
typename _Tp>
275 fill_n(_OIter, _Size,
const _Tp&);
279 template<
typename _FIter1,
typename _FIter2>
282 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
284 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
287 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
292#if __cplusplus >= 201103L
293 template<
typename _IIter,
typename _Predicate>
296 find_if_not(_IIter, _IIter, _Predicate);
303 template<
typename _IIter1,
typename _IIter2>
306 includes(_IIter1, _IIter1, _IIter2, _IIter2);
308 template<
typename _IIter1,
typename _IIter2,
typename _Compare>
311 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
313 template<
typename _BIter>
315 inplace_merge(_BIter, _BIter, _BIter);
317 template<
typename _BIter,
typename _Compare>
319 inplace_merge(_BIter, _BIter, _BIter, _Compare);
321#if __cplusplus >= 201103L
322 template<
typename _RAIter>
325 is_heap(_RAIter, _RAIter);
327 template<
typename _RAIter,
typename _Compare>
330 is_heap(_RAIter, _RAIter, _Compare);
332 template<
typename _RAIter>
335 is_heap_until(_RAIter, _RAIter);
337 template<
typename _RAIter,
typename _Compare>
340 is_heap_until(_RAIter, _RAIter, _Compare);
342 template<
typename _IIter,
typename _Predicate>
345 is_partitioned(_IIter, _IIter, _Predicate);
347 template<
typename _FIter1,
typename _FIter2>
350 is_permutation(_FIter1, _FIter1, _FIter2);
352 template<
typename _FIter1,
typename _FIter2,
353 typename _BinaryPredicate>
356 is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
358 template<
typename _FIter>
361 is_sorted(_FIter, _FIter);
363 template<
typename _FIter,
typename _Compare>
366 is_sorted(_FIter, _FIter, _Compare);
368 template<
typename _FIter>
371 is_sorted_until(_FIter, _FIter);
373 template<
typename _FIter,
typename _Compare>
376 is_sorted_until(_FIter, _FIter, _Compare);
379 template<
typename _FIter1,
typename _FIter2>
382 iter_swap(_FIter1, _FIter2);
384 template<
typename _FIter,
typename _Tp>
387 lower_bound(_FIter, _FIter,
const _Tp&);
389 template<
typename _FIter,
typename _Tp,
typename _Compare>
392 lower_bound(_FIter, _FIter,
const _Tp&, _Compare);
394 template<
typename _RAIter>
397 make_heap(_RAIter, _RAIter);
399 template<
typename _RAIter,
typename _Compare>
402 make_heap(_RAIter, _RAIter, _Compare);
404 template<
typename _Tp>
407 max(
const _Tp&,
const _Tp&);
409 template<
typename _Tp,
typename _Compare>
412 max(
const _Tp&,
const _Tp&, _Compare);
417 template<
typename _Tp>
420 min(
const _Tp&,
const _Tp&);
422 template<
typename _Tp,
typename _Compare>
425 min(
const _Tp&,
const _Tp&, _Compare);
429#if __cplusplus >= 201103L
430 template<
typename _Tp>
432 pair<const _Tp&, const _Tp&>
433 minmax(
const _Tp&,
const _Tp&);
435 template<
typename _Tp,
typename _Compare>
437 pair<const _Tp&, const _Tp&>
438 minmax(
const _Tp&,
const _Tp&, _Compare);
440 template<
typename _FIter>
443 minmax_element(_FIter, _FIter);
445 template<
typename _FIter,
typename _Compare>
448 minmax_element(_FIter, _FIter, _Compare);
450 template<
typename _Tp>
453 min(initializer_list<_Tp>);
455 template<
typename _Tp,
typename _Compare>
458 min(initializer_list<_Tp>, _Compare);
460 template<
typename _Tp>
463 max(initializer_list<_Tp>);
465 template<
typename _Tp,
typename _Compare>
468 max(initializer_list<_Tp>, _Compare);
470 template<
typename _Tp>
473 minmax(initializer_list<_Tp>);
475 template<
typename _Tp,
typename _Compare>
478 minmax(initializer_list<_Tp>, _Compare);
483 template<
typename _BIter>
486 next_permutation(_BIter, _BIter);
488 template<
typename _BIter,
typename _Compare>
491 next_permutation(_BIter, _BIter, _Compare);
493#if __cplusplus >= 201103L
494 template<
typename _IIter,
typename _Predicate>
497 none_of(_IIter, _IIter, _Predicate);
503 template<
typename _IIter,
typename _RAIter>
506 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
508 template<
typename _IIter,
typename _RAIter,
typename _Compare>
511 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
515#if __cplusplus >= 201103L
516 template<
typename _IIter,
typename _OIter1,
517 typename _OIter2,
typename _Predicate>
519 pair<_OIter1, _OIter2>
520 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
522 template<
typename _FIter,
typename _Predicate>
525 partition_point(_FIter, _FIter, _Predicate);
528 template<
typename _RAIter>
531 pop_heap(_RAIter, _RAIter);
533 template<
typename _RAIter,
typename _Compare>
536 pop_heap(_RAIter, _RAIter, _Compare);
538 template<
typename _BIter>
541 prev_permutation(_BIter, _BIter);
543 template<
typename _BIter,
typename _Compare>
546 prev_permutation(_BIter, _BIter, _Compare);
548 template<
typename _RAIter>
551 push_heap(_RAIter, _RAIter);
553 template<
typename _RAIter,
typename _Compare>
556 push_heap(_RAIter, _RAIter, _Compare);
560 template<
typename _FIter,
typename _Tp>
563 remove(_FIter, _FIter,
const _Tp&);
565 template<
typename _FIter,
typename _Predicate>
568 remove_if(_FIter, _FIter, _Predicate);
570 template<
typename _IIter,
typename _OIter,
typename _Tp>
573 remove_copy(_IIter, _IIter, _OIter,
const _Tp&);
575 template<
typename _IIter,
typename _OIter,
typename _Predicate>
578 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
582 template<
typename _IIter,
typename _OIter,
typename _Tp>
585 replace_copy(_IIter, _IIter, _OIter,
const _Tp&,
const _Tp&);
587 template<
typename _Iter,
typename _OIter,
typename _Predicate,
typename _Tp>
590 replace_copy_if(_Iter, _Iter, _OIter, _Predicate,
const _Tp&);
594 template<
typename _BIter>
597 reverse(_BIter, _BIter);
599 template<
typename _BIter,
typename _OIter>
602 reverse_copy(_BIter, _BIter, _OIter);
604_GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
606 template<
typename _FIter>
609 rotate(_FIter, _FIter, _FIter);
611_GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
613 template<
typename _FIter,
typename _OIter>
616 rotate_copy(_FIter, _FIter, _FIter, _OIter);
625#if (__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
626 template<
typename _RAIter,
typename _UGenerator>
628 shuffle(_RAIter, _RAIter, _UGenerator&&);
631 template<
typename _RAIter>
634 sort_heap(_RAIter, _RAIter);
636 template<
typename _RAIter,
typename _Compare>
639 sort_heap(_RAIter, _RAIter, _Compare);
642 template<
typename _BIter,
typename _Predicate>
644 stable_partition(_BIter, _BIter, _Predicate);
647#if __cplusplus < 201103L
650 template<
typename _Tp,
size_t _Nm>
653 swap(_Tp& __a, _Tp& __b);
655 template<
typename _Tp,
size_t _Nm>
658 swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]);
661 template<
typename _FIter1,
typename _FIter2>
664 swap_ranges(_FIter1, _FIter1, _FIter2);
668 template<
typename _FIter>
671 unique(_FIter, _FIter);
673 template<
typename _FIter,
typename _BinaryPredicate>
676 unique(_FIter, _FIter, _BinaryPredicate);
680 template<
typename _FIter,
typename _Tp>
683 upper_bound(_FIter, _FIter,
const _Tp&);
685 template<
typename _FIter,
typename _Tp,
typename _Compare>
688 upper_bound(_FIter, _FIter,
const _Tp&, _Compare);
690_GLIBCXX_BEGIN_NAMESPACE_ALGO
692 template<
typename _FIter>
695 adjacent_find(_FIter, _FIter);
697 template<
typename _FIter,
typename _BinaryPredicate>
700 adjacent_find(_FIter, _FIter, _BinaryPredicate);
702 template<
typename _IIter,
typename _Tp>
704 typename iterator_traits<_IIter>::difference_type
705 count(_IIter, _IIter,
const _Tp&);
707 template<
typename _IIter,
typename _Predicate>
709 typename iterator_traits<_IIter>::difference_type
710 count_if(_IIter, _IIter, _Predicate);
712 template<
typename _IIter1,
typename _IIter2>
715 equal(_IIter1, _IIter1, _IIter2);
717 template<
typename _IIter1,
typename _IIter2,
typename _BinaryPredicate>
720 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
722 template<
typename _IIter,
typename _Tp>
725 find(_IIter, _IIter,
const _Tp&);
727 template<
typename _FIter1,
typename _FIter2>
730 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
732 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
735 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
737 template<
typename _IIter,
typename _Predicate>
740 find_if(_IIter, _IIter, _Predicate);
742 template<
typename _IIter,
typename _Funct>
745 for_each(_IIter, _IIter, _Funct);
747 template<
typename _FIter,
typename _Generator>
750 generate(_FIter, _FIter, _Generator);
752 template<
typename _OIter,
typename _Size,
typename _Generator>
755 generate_n(_OIter, _Size, _Generator);
757 template<
typename _IIter1,
typename _IIter2>
760 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
762 template<
typename _IIter1,
typename _IIter2,
typename _Compare>
765 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
767 template<
typename _FIter>
770 max_element(_FIter, _FIter);
772 template<
typename _FIter,
typename _Compare>
775 max_element(_FIter, _FIter, _Compare);
777 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
780 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
782 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
786 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
788 template<
typename _FIter>
791 min_element(_FIter, _FIter);
793 template<
typename _FIter,
typename _Compare>
796 min_element(_FIter, _FIter, _Compare);
798 template<
typename _IIter1,
typename _IIter2>
800 pair<_IIter1, _IIter2>
801 mismatch(_IIter1, _IIter1, _IIter2);
803 template<
typename _IIter1,
typename _IIter2,
typename _BinaryPredicate>
805 pair<_IIter1, _IIter2>
806 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
808 template<
typename _RAIter>
811 nth_element(_RAIter, _RAIter, _RAIter);
813 template<
typename _RAIter,
typename _Compare>
816 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
818 template<
typename _RAIter>
821 partial_sort(_RAIter, _RAIter, _RAIter);
823 template<
typename _RAIter,
typename _Compare>
826 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
828 template<
typename _BIter,
typename _Predicate>
831 partition(_BIter, _BIter, _Predicate);
834 template<
typename _RAIter>
836 random_shuffle(_RAIter, _RAIter);
838 template<
typename _RAIter,
typename _Generator>
840 random_shuffle(_RAIter, _RAIter,
841#
if __cplusplus >= 201103L
848 template<
typename _FIter,
typename _Tp>
851 replace(_FIter, _FIter,
const _Tp&,
const _Tp&);
853 template<
typename _FIter,
typename _Predicate,
typename _Tp>
856 replace_if(_FIter, _FIter, _Predicate,
const _Tp&);
858 template<
typename _FIter1,
typename _FIter2>
861 search(_FIter1, _FIter1, _FIter2, _FIter2);
863 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
866 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
868 template<
typename _FIter,
typename _Size,
typename _Tp>
871 search_n(_FIter, _FIter, _Size,
const _Tp&);
873 template<
typename _FIter,
typename _Size,
typename _Tp,
874 typename _BinaryPredicate>
877 search_n(_FIter, _FIter, _Size,
const _Tp&, _BinaryPredicate);
879 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
882 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
884 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
888 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
890 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
893 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
895 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
899 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
901 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
904 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
906 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
910 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
913 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
916 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
918 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
922 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
924 template<
typename _RAIter>
927 sort(_RAIter, _RAIter);
929 template<
typename _RAIter,
typename _Compare>
932 sort(_RAIter, _RAIter, _Compare);
934 template<
typename _RAIter>
936 stable_sort(_RAIter, _RAIter);
938 template<
typename _RAIter,
typename _Compare>
940 stable_sort(_RAIter, _RAIter, _Compare);
942 template<
typename _IIter,
typename _OIter,
typename _UnaryOperation>
945 transform(_IIter, _IIter, _OIter, _UnaryOperation);
947 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
948 typename _BinaryOperation>
951 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
953 template<
typename _IIter,
typename _OIter>
956 unique_copy(_IIter, _IIter, _OIter);
958 template<
typename _IIter,
typename _OIter,
typename _BinaryPredicate>
961 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
963_GLIBCXX_END_NAMESPACE_ALGO
964_GLIBCXX_END_NAMESPACE_VERSION
967#ifdef _GLIBCXX_PARALLEL
constexpr const _Tp & clamp(const _Tp &, const _Tp &, const _Tp &)
Returns the value clamped between lo and hi.
constexpr const _Tp & max(const _Tp &, const _Tp &)
This does what you think it does.
constexpr pair< const _Tp &, const _Tp & > minmax(const _Tp &, const _Tp &)
Determines min and max at once as an ordered pair.
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
ISO C++ entities toplevel namespace is std.