30#ifndef _GLIBCXX_ALGORITHMFWD_H
31#define _GLIBCXX_ALGORITHMFWD_H 1
34#pragma GCC system_header
40#if __cplusplus >= 201103L
44#pragma GCC diagnostic push
45#pragma GCC diagnostic ignored "-Wc++11-extensions"
47namespace std _GLIBCXX_VISIBILITY(default)
49_GLIBCXX_BEGIN_NAMESPACE_VERSION
199#if __cplusplus >= 201103L
200 template<
typename _IIter,
typename _Predicate>
203 all_of(_IIter, _IIter, _Predicate);
205 template<
typename _IIter,
typename _Predicate>
208 any_of(_IIter, _IIter, _Predicate);
211 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
214 binary_search(_FIter, _FIter,
const _Tp&);
216 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter),
220 binary_search(_FIter, _FIter,
const _Tp&, _Compare);
222#if __cplusplus > 201402L
223 template<
typename _Tp>
226 clamp(
const _Tp&,
const _Tp&,
const _Tp&);
228 template<
typename _Tp,
typename _Compare>
231 clamp(
const _Tp&,
const _Tp&,
const _Tp&, _Compare);
234 template<
typename _IIter,
typename _OIter>
237 copy(_IIter, _IIter, _OIter);
239 template<
typename _BIter1,
typename _BIter2>
242 copy_backward(_BIter1, _BIter1, _BIter2);
244#if __cplusplus >= 201103L
245 template<
typename _IIter,
typename _OIter,
typename _Predicate>
248 copy_if(_IIter, _IIter, _OIter, _Predicate);
250 template<
typename _IIter,
typename _Size,
typename _OIter>
253 copy_n(_IIter, _Size, _OIter);
259 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
262 equal_range(_FIter, _FIter,
const _Tp&);
264 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter),
268 equal_range(_FIter, _FIter,
const _Tp&, _Compare);
270 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
273 fill(_FIter, _FIter,
const _Tp&);
275 template<
typename _OIter,
typename _Size,
276 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_OIter)>
279 fill_n(_OIter, _Size,
const _Tp&);
283 template<
typename _FIter1,
typename _FIter2>
286 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
288 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
291 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
296#if __cplusplus >= 201103L
297 template<
typename _IIter,
typename _Predicate>
300 find_if_not(_IIter, _IIter, _Predicate);
307 template<
typename _IIter1,
typename _IIter2>
310 includes(_IIter1, _IIter1, _IIter2, _IIter2);
312 template<
typename _IIter1,
typename _IIter2,
typename _Compare>
315 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
317 template<
typename _BIter>
319 inplace_merge(_BIter, _BIter, _BIter);
321 template<
typename _BIter,
typename _Compare>
323 inplace_merge(_BIter, _BIter, _BIter, _Compare);
325#if __cplusplus >= 201103L
326 template<
typename _RAIter>
329 is_heap(_RAIter, _RAIter);
331 template<
typename _RAIter,
typename _Compare>
334 is_heap(_RAIter, _RAIter, _Compare);
336 template<
typename _RAIter>
339 is_heap_until(_RAIter, _RAIter);
341 template<
typename _RAIter,
typename _Compare>
344 is_heap_until(_RAIter, _RAIter, _Compare);
346 template<
typename _IIter,
typename _Predicate>
349 is_partitioned(_IIter, _IIter, _Predicate);
351 template<
typename _FIter1,
typename _FIter2>
354 is_permutation(_FIter1, _FIter1, _FIter2);
356 template<
typename _FIter1,
typename _FIter2,
357 typename _BinaryPredicate>
360 is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
362 template<
typename _FIter>
365 is_sorted(_FIter, _FIter);
367 template<
typename _FIter,
typename _Compare>
370 is_sorted(_FIter, _FIter, _Compare);
372 template<
typename _FIter>
375 is_sorted_until(_FIter, _FIter);
377 template<
typename _FIter,
typename _Compare>
380 is_sorted_until(_FIter, _FIter, _Compare);
383 template<
typename _FIter1,
typename _FIter2>
386 iter_swap(_FIter1, _FIter2);
388 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
391 lower_bound(_FIter, _FIter,
const _Tp&);
393 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter),
397 lower_bound(_FIter, _FIter,
const _Tp&, _Compare);
399 template<
typename _RAIter>
402 make_heap(_RAIter, _RAIter);
404 template<
typename _RAIter,
typename _Compare>
407 make_heap(_RAIter, _RAIter, _Compare);
409 template<
typename _Tp>
412 max(
const _Tp&,
const _Tp&);
414 template<
typename _Tp,
typename _Compare>
417 max(
const _Tp&,
const _Tp&, _Compare);
422 template<
typename _Tp>
425 min(
const _Tp&,
const _Tp&);
427 template<
typename _Tp,
typename _Compare>
430 min(
const _Tp&,
const _Tp&, _Compare);
434#if __cplusplus >= 201103L
435 template<
typename _Tp>
438 minmax(
const _Tp&,
const _Tp&);
440 template<
typename _Tp,
typename _Compare>
443 minmax(
const _Tp&,
const _Tp&, _Compare);
445 template<
typename _FIter>
448 minmax_element(_FIter, _FIter);
450 template<
typename _FIter,
typename _Compare>
453 minmax_element(_FIter, _FIter, _Compare);
455 template<
typename _Tp>
460 template<
typename _Tp,
typename _Compare>
465 template<
typename _Tp>
470 template<
typename _Tp,
typename _Compare>
475 template<
typename _Tp>
480 template<
typename _Tp,
typename _Compare>
488 template<
typename _BIter>
491 next_permutation(_BIter, _BIter);
493 template<
typename _BIter,
typename _Compare>
496 next_permutation(_BIter, _BIter, _Compare);
498#if __cplusplus >= 201103L
499 template<
typename _IIter,
typename _Predicate>
502 none_of(_IIter, _IIter, _Predicate);
508 template<
typename _IIter,
typename _RAIter>
511 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
513 template<
typename _IIter,
typename _RAIter,
typename _Compare>
516 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
520#if __cplusplus >= 201103L
521 template<
typename _IIter,
typename _OIter1,
522 typename _OIter2,
typename _Predicate>
525 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
527 template<
typename _FIter,
typename _Predicate>
530 partition_point(_FIter, _FIter, _Predicate);
533 template<
typename _RAIter>
536 pop_heap(_RAIter, _RAIter);
538 template<
typename _RAIter,
typename _Compare>
541 pop_heap(_RAIter, _RAIter, _Compare);
543 template<
typename _BIter>
546 prev_permutation(_BIter, _BIter);
548 template<
typename _BIter,
typename _Compare>
551 prev_permutation(_BIter, _BIter, _Compare);
553 template<
typename _RAIter>
556 push_heap(_RAIter, _RAIter);
558 template<
typename _RAIter,
typename _Compare>
561 push_heap(_RAIter, _RAIter, _Compare);
565 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
568 remove(_FIter, _FIter,
const _Tp&);
570 template<
typename _FIter,
typename _Predicate>
573 remove_if(_FIter, _FIter, _Predicate);
575 template<
typename _IIter,
typename _OIter,
576 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_IIter)>
579 remove_copy(_IIter, _IIter, _OIter,
const _Tp&);
581 template<
typename _IIter,
typename _OIter,
typename _Predicate>
584 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
588 template<
typename _IIter,
typename _OIter,
typename _Tp>
591 replace_copy(_IIter, _IIter, _OIter,
const _Tp&,
const _Tp&);
593 template<
typename _Iter,
typename _OIter,
typename _Predicate,
594 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_OIter)>
597 replace_copy_if(_Iter, _Iter, _OIter, _Predicate,
const _Tp&);
601 template<
typename _BIter>
604 reverse(_BIter, _BIter);
606 template<
typename _BIter,
typename _OIter>
609 reverse_copy(_BIter, _BIter, _OIter);
611_GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
613 template<
typename _FIter>
616 rotate(_FIter, _FIter, _FIter);
618_GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
620 template<
typename _FIter,
typename _OIter>
623 rotate_copy(_FIter, _FIter, _FIter, _OIter);
632#if __cplusplus >= 201103L
633 template<
typename _RAIter,
typename _UGenerator>
635 shuffle(_RAIter, _RAIter, _UGenerator&&);
638 template<
typename _RAIter>
641 sort_heap(_RAIter, _RAIter);
643 template<
typename _RAIter,
typename _Compare>
646 sort_heap(_RAIter, _RAIter, _Compare);
649 template<
typename _BIter,
typename _Predicate>
651 stable_partition(_BIter, _BIter, _Predicate);
654#if __cplusplus < 201103L
657 template<
typename _Tp,
size_t _Nm>
660 swap(_Tp& __a, _Tp& __b);
662 template<
typename _Tp,
size_t _Nm>
665 swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]);
668 template<
typename _FIter1,
typename _FIter2>
671 swap_ranges(_FIter1, _FIter1, _FIter2);
675 template<
typename _FIter>
678 unique(_FIter, _FIter);
680 template<
typename _FIter,
typename _BinaryPredicate>
683 unique(_FIter, _FIter, _BinaryPredicate);
687 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
690 upper_bound(_FIter, _FIter,
const _Tp&);
692 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter),
696 upper_bound(_FIter, _FIter,
const _Tp&, _Compare);
698_GLIBCXX_BEGIN_NAMESPACE_ALGO
700 template<
typename _FIter>
703 adjacent_find(_FIter, _FIter);
705 template<
typename _FIter,
typename _BinaryPredicate>
708 adjacent_find(_FIter, _FIter, _BinaryPredicate);
710 template<
typename _IIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_IIter)>
713 count(_IIter, _IIter,
const _Tp&);
715 template<
typename _IIter,
typename _Predicate>
718 count_if(_IIter, _IIter, _Predicate);
720 template<
typename _IIter1,
typename _IIter2>
723 equal(_IIter1, _IIter1, _IIter2);
725 template<
typename _IIter1,
typename _IIter2,
typename _BinaryPredicate>
728 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
730 template<
typename _IIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_IIter)>
733 find(_IIter, _IIter,
const _Tp&);
735 template<
typename _FIter1,
typename _FIter2>
738 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
740 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
743 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
745 template<
typename _IIter,
typename _Predicate>
748 find_if(_IIter, _IIter, _Predicate);
750 template<
typename _IIter,
typename _Funct>
753 for_each(_IIter, _IIter, _Funct);
755 template<
typename _FIter,
typename _Generator>
758 generate(_FIter, _FIter, _Generator);
760 template<
typename _OIter,
typename _Size,
typename _Generator>
763 generate_n(_OIter, _Size, _Generator);
765 template<
typename _IIter1,
typename _IIter2>
768 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
770 template<
typename _IIter1,
typename _IIter2,
typename _Compare>
773 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
775 template<
typename _FIter>
778 max_element(_FIter, _FIter);
780 template<
typename _FIter,
typename _Compare>
783 max_element(_FIter, _FIter, _Compare);
785 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
788 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
790 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
794 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
796 template<
typename _FIter>
799 min_element(_FIter, _FIter);
801 template<
typename _FIter,
typename _Compare>
804 min_element(_FIter, _FIter, _Compare);
806 template<
typename _IIter1,
typename _IIter2>
809 mismatch(_IIter1, _IIter1, _IIter2);
811 template<
typename _IIter1,
typename _IIter2,
typename _BinaryPredicate>
814 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
816 template<
typename _RAIter>
819 nth_element(_RAIter, _RAIter, _RAIter);
821 template<
typename _RAIter,
typename _Compare>
824 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
826 template<
typename _RAIter>
829 partial_sort(_RAIter, _RAIter, _RAIter);
831 template<
typename _RAIter,
typename _Compare>
834 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
836 template<
typename _BIter,
typename _Predicate>
839 partition(_BIter, _BIter, _Predicate);
842 template<
typename _RAIter>
843 _GLIBCXX14_DEPRECATED_SUGGEST(
"std::shuffle")
845 random_shuffle(_RAIter, _RAIter);
847 template<typename _RAIter, typename _Generator>
848 _GLIBCXX14_DEPRECATED_SUGGEST(
"std::shuffle")
850 random_shuffle(_RAIter, _RAIter,
851#if __cplusplus >= 201103L
858 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
861 replace(_FIter, _FIter,
const _Tp&,
const _Tp&);
863 template<
typename _FIter,
typename _Predicate,
864 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
867 replace_if(_FIter, _FIter, _Predicate,
const _Tp&);
869 template<
typename _FIter1,
typename _FIter2>
872 search(_FIter1, _FIter1, _FIter2, _FIter2);
874 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
877 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
879 template<
typename _FIter,
typename _Size,
880 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
883 search_n(_FIter, _FIter, _Size,
const _Tp&);
885 template<
typename _FIter,
typename _Size,
886 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter),
887 typename _BinaryPredicate>
890 search_n(_FIter, _FIter, _Size,
const _Tp&, _BinaryPredicate);
892 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
895 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
897 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
901 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
903 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
906 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
908 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
912 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
914 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
917 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
919 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
923 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
926 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
929 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
931 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
935 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
937 template<
typename _RAIter>
940 sort(_RAIter, _RAIter);
942 template<
typename _RAIter,
typename _Compare>
945 sort(_RAIter, _RAIter, _Compare);
947 template<
typename _RAIter>
950 stable_sort(_RAIter, _RAIter);
952 template<
typename _RAIter,
typename _Compare>
955 stable_sort(_RAIter, _RAIter, _Compare);
957 template<
typename _IIter,
typename _OIter,
typename _UnaryOperation>
960 transform(_IIter, _IIter, _OIter, _UnaryOperation);
962 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
963 typename _BinaryOperation>
966 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
968 template<
typename _IIter,
typename _OIter>
971 unique_copy(_IIter, _IIter, _OIter);
973 template<
typename _IIter,
typename _OIter,
typename _BinaryPredicate>
976 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
978_GLIBCXX_END_NAMESPACE_ALGO
979_GLIBCXX_END_NAMESPACE_VERSION
982#pragma GCC diagnostic pop
984#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.
Struct holding two objects of arbitrary type.
Traits class for iterators.