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>
320 inplace_merge(_BIter, _BIter, _BIter);
322 template<
typename _BIter,
typename _Compare>
325 inplace_merge(_BIter, _BIter, _BIter, _Compare);
327#if __cplusplus >= 201103L
328 template<
typename _RAIter>
331 is_heap(_RAIter, _RAIter);
333 template<
typename _RAIter,
typename _Compare>
336 is_heap(_RAIter, _RAIter, _Compare);
338 template<
typename _RAIter>
341 is_heap_until(_RAIter, _RAIter);
343 template<
typename _RAIter,
typename _Compare>
346 is_heap_until(_RAIter, _RAIter, _Compare);
348 template<
typename _IIter,
typename _Predicate>
351 is_partitioned(_IIter, _IIter, _Predicate);
353 template<
typename _FIter1,
typename _FIter2>
356 is_permutation(_FIter1, _FIter1, _FIter2);
358 template<
typename _FIter1,
typename _FIter2,
359 typename _BinaryPredicate>
362 is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
364 template<
typename _FIter>
367 is_sorted(_FIter, _FIter);
369 template<
typename _FIter,
typename _Compare>
372 is_sorted(_FIter, _FIter, _Compare);
374 template<
typename _FIter>
377 is_sorted_until(_FIter, _FIter);
379 template<
typename _FIter,
typename _Compare>
382 is_sorted_until(_FIter, _FIter, _Compare);
385 template<
typename _FIter1,
typename _FIter2>
388 iter_swap(_FIter1, _FIter2);
390 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
393 lower_bound(_FIter, _FIter,
const _Tp&);
395 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter),
399 lower_bound(_FIter, _FIter,
const _Tp&, _Compare);
401 template<
typename _RAIter>
404 make_heap(_RAIter, _RAIter);
406 template<
typename _RAIter,
typename _Compare>
409 make_heap(_RAIter, _RAIter, _Compare);
411 template<
typename _Tp>
414 max(
const _Tp&,
const _Tp&);
416 template<
typename _Tp,
typename _Compare>
419 max(
const _Tp&,
const _Tp&, _Compare);
424 template<
typename _Tp>
427 min(
const _Tp&,
const _Tp&);
429 template<
typename _Tp,
typename _Compare>
432 min(
const _Tp&,
const _Tp&, _Compare);
436#if __cplusplus >= 201103L
437 template<
typename _Tp>
440 minmax(
const _Tp&,
const _Tp&);
442 template<
typename _Tp,
typename _Compare>
445 minmax(
const _Tp&,
const _Tp&, _Compare);
447 template<
typename _FIter>
450 minmax_element(_FIter, _FIter);
452 template<
typename _FIter,
typename _Compare>
455 minmax_element(_FIter, _FIter, _Compare);
457 template<
typename _Tp>
462 template<
typename _Tp,
typename _Compare>
467 template<
typename _Tp>
472 template<
typename _Tp,
typename _Compare>
477 template<
typename _Tp>
482 template<
typename _Tp,
typename _Compare>
490 template<
typename _BIter>
493 next_permutation(_BIter, _BIter);
495 template<
typename _BIter,
typename _Compare>
498 next_permutation(_BIter, _BIter, _Compare);
500#if __cplusplus >= 201103L
501 template<
typename _IIter,
typename _Predicate>
504 none_of(_IIter, _IIter, _Predicate);
510 template<
typename _IIter,
typename _RAIter>
513 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
515 template<
typename _IIter,
typename _RAIter,
typename _Compare>
518 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
522#if __cplusplus >= 201103L
523 template<
typename _IIter,
typename _OIter1,
524 typename _OIter2,
typename _Predicate>
527 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
529 template<
typename _FIter,
typename _Predicate>
532 partition_point(_FIter, _FIter, _Predicate);
535 template<
typename _RAIter>
538 pop_heap(_RAIter, _RAIter);
540 template<
typename _RAIter,
typename _Compare>
543 pop_heap(_RAIter, _RAIter, _Compare);
545 template<
typename _BIter>
548 prev_permutation(_BIter, _BIter);
550 template<
typename _BIter,
typename _Compare>
553 prev_permutation(_BIter, _BIter, _Compare);
555 template<
typename _RAIter>
558 push_heap(_RAIter, _RAIter);
560 template<
typename _RAIter,
typename _Compare>
563 push_heap(_RAIter, _RAIter, _Compare);
567 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
570 remove(_FIter, _FIter,
const _Tp&);
572 template<
typename _FIter,
typename _Predicate>
575 remove_if(_FIter, _FIter, _Predicate);
577 template<
typename _IIter,
typename _OIter,
578 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_IIter)>
581 remove_copy(_IIter, _IIter, _OIter,
const _Tp&);
583 template<
typename _IIter,
typename _OIter,
typename _Predicate>
586 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
590 template<
typename _IIter,
typename _OIter,
typename _Tp>
593 replace_copy(_IIter, _IIter, _OIter,
const _Tp&,
const _Tp&);
595 template<
typename _Iter,
typename _OIter,
typename _Predicate,
596 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_OIter)>
599 replace_copy_if(_Iter, _Iter, _OIter, _Predicate,
const _Tp&);
603 template<
typename _BIter>
606 reverse(_BIter, _BIter);
608 template<
typename _BIter,
typename _OIter>
611 reverse_copy(_BIter, _BIter, _OIter);
613_GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
615 template<
typename _FIter>
618 rotate(_FIter, _FIter, _FIter);
620_GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
622 template<
typename _FIter,
typename _OIter>
625 rotate_copy(_FIter, _FIter, _FIter, _OIter);
634#if __cplusplus >= 201103L
635 template<
typename _RAIter,
typename _UGenerator>
637 shuffle(_RAIter, _RAIter, _UGenerator&&);
640 template<
typename _RAIter>
643 sort_heap(_RAIter, _RAIter);
645 template<
typename _RAIter,
typename _Compare>
648 sort_heap(_RAIter, _RAIter, _Compare);
651 template<
typename _BIter,
typename _Predicate>
654 stable_partition(_BIter, _BIter, _Predicate);
657#if __cplusplus < 201103L
660 template<
typename _Tp,
size_t _Nm>
663 swap(_Tp& __a, _Tp& __b);
665 template<
typename _Tp,
size_t _Nm>
668 swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]);
671 template<
typename _FIter1,
typename _FIter2>
674 swap_ranges(_FIter1, _FIter1, _FIter2);
678 template<
typename _FIter>
681 unique(_FIter, _FIter);
683 template<
typename _FIter,
typename _BinaryPredicate>
686 unique(_FIter, _FIter, _BinaryPredicate);
690 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
693 upper_bound(_FIter, _FIter,
const _Tp&);
695 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter),
699 upper_bound(_FIter, _FIter,
const _Tp&, _Compare);
701_GLIBCXX_BEGIN_NAMESPACE_ALGO
703 template<
typename _FIter>
706 adjacent_find(_FIter, _FIter);
708 template<
typename _FIter,
typename _BinaryPredicate>
711 adjacent_find(_FIter, _FIter, _BinaryPredicate);
713 template<
typename _IIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_IIter)>
716 count(_IIter, _IIter,
const _Tp&);
718 template<
typename _IIter,
typename _Predicate>
721 count_if(_IIter, _IIter, _Predicate);
723 template<
typename _IIter1,
typename _IIter2>
726 equal(_IIter1, _IIter1, _IIter2);
728 template<
typename _IIter1,
typename _IIter2,
typename _BinaryPredicate>
731 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
733 template<
typename _IIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_IIter)>
736 find(_IIter, _IIter,
const _Tp&);
738 template<
typename _FIter1,
typename _FIter2>
741 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
743 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
746 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
748 template<
typename _IIter,
typename _Predicate>
751 find_if(_IIter, _IIter, _Predicate);
753 template<
typename _IIter,
typename _Funct>
756 for_each(_IIter, _IIter, _Funct);
758 template<
typename _FIter,
typename _Generator>
761 generate(_FIter, _FIter, _Generator);
763 template<
typename _OIter,
typename _Size,
typename _Generator>
766 generate_n(_OIter, _Size, _Generator);
768 template<
typename _IIter1,
typename _IIter2>
771 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
773 template<
typename _IIter1,
typename _IIter2,
typename _Compare>
776 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
778 template<
typename _FIter>
781 max_element(_FIter, _FIter);
783 template<
typename _FIter,
typename _Compare>
786 max_element(_FIter, _FIter, _Compare);
788 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
791 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
793 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
797 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
799 template<
typename _FIter>
802 min_element(_FIter, _FIter);
804 template<
typename _FIter,
typename _Compare>
807 min_element(_FIter, _FIter, _Compare);
809 template<
typename _IIter1,
typename _IIter2>
812 mismatch(_IIter1, _IIter1, _IIter2);
814 template<
typename _IIter1,
typename _IIter2,
typename _BinaryPredicate>
817 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
819 template<
typename _RAIter>
822 nth_element(_RAIter, _RAIter, _RAIter);
824 template<
typename _RAIter,
typename _Compare>
827 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
829 template<
typename _RAIter>
832 partial_sort(_RAIter, _RAIter, _RAIter);
834 template<
typename _RAIter,
typename _Compare>
837 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
839 template<
typename _BIter,
typename _Predicate>
842 partition(_BIter, _BIter, _Predicate);
845 template<
typename _RAIter>
846 _GLIBCXX14_DEPRECATED_SUGGEST(
"std::shuffle")
848 random_shuffle(_RAIter, _RAIter);
850 template<typename _RAIter, typename _Generator>
851 _GLIBCXX14_DEPRECATED_SUGGEST(
"std::shuffle")
853 random_shuffle(_RAIter, _RAIter,
854#if __cplusplus >= 201103L
861 template<
typename _FIter,
typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
864 replace(_FIter, _FIter,
const _Tp&,
const _Tp&);
866 template<
typename _FIter,
typename _Predicate,
867 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
870 replace_if(_FIter, _FIter, _Predicate,
const _Tp&);
872 template<
typename _FIter1,
typename _FIter2>
875 search(_FIter1, _FIter1, _FIter2, _FIter2);
877 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
880 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
882 template<
typename _FIter,
typename _Size,
883 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter)>
886 search_n(_FIter, _FIter, _Size,
const _Tp&);
888 template<
typename _FIter,
typename _Size,
889 typename _Tp _GLIBCXX26_ALGO_DEF_VAL_T(_FIter),
890 typename _BinaryPredicate>
893 search_n(_FIter, _FIter, _Size,
const _Tp&, _BinaryPredicate);
895 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
898 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
900 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
904 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
906 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
909 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
911 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
915 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
917 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
920 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
922 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
926 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
929 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
932 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
934 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
938 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
940 template<
typename _RAIter>
943 sort(_RAIter, _RAIter);
945 template<
typename _RAIter,
typename _Compare>
948 sort(_RAIter, _RAIter, _Compare);
950 template<
typename _RAIter>
953 stable_sort(_RAIter, _RAIter);
955 template<
typename _RAIter,
typename _Compare>
958 stable_sort(_RAIter, _RAIter, _Compare);
960 template<
typename _IIter,
typename _OIter,
typename _UnaryOperation>
963 transform(_IIter, _IIter, _OIter, _UnaryOperation);
965 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
966 typename _BinaryOperation>
969 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
971 template<
typename _IIter,
typename _OIter>
974 unique_copy(_IIter, _IIter, _OIter);
976 template<
typename _IIter,
typename _OIter,
typename _BinaryPredicate>
979 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
981_GLIBCXX_END_NAMESPACE_ALGO
982_GLIBCXX_END_NAMESPACE_VERSION
985#pragma GCC diagnostic pop
987#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.