30 #ifndef _GLIBCXX_ALGORITHMFWD_H
31 #define _GLIBCXX_ALGORITHMFWD_H 1
33 #pragma GCC system_header
38 #if __cplusplus >= 201103L
39 #include <initializer_list>
42 namespace std _GLIBCXX_VISIBILITY(default)
44 _GLIBCXX_BEGIN_NAMESPACE_VERSION
193 #if __cplusplus >= 201103L
194 template<
typename _IIter,
typename _Predicate>
196 all_of(_IIter, _IIter, _Predicate);
198 template<
typename _IIter,
typename _Predicate>
200 any_of(_IIter, _IIter, _Predicate);
203 template<
typename _FIter,
typename _Tp>
205 binary_search(_FIter, _FIter,
const _Tp&);
207 template<
typename _FIter,
typename _Tp,
typename _Compare>
209 binary_search(_FIter, _FIter,
const _Tp&, _Compare);
211 template<
typename _IIter,
typename _OIter>
213 copy(_IIter, _IIter, _OIter);
215 template<
typename _BIter1,
typename _BIter2>
217 copy_backward(_BIter1, _BIter1, _BIter2);
219 #if __cplusplus >= 201103L
220 template<
typename _IIter,
typename _OIter,
typename _Predicate>
222 copy_if(_IIter, _IIter, _OIter, _Predicate);
224 template<
typename _IIter,
typename _Size,
typename _OIter>
226 copy_n(_IIter, _Size, _OIter);
232 template<
typename _FIter,
typename _Tp>
234 equal_range(_FIter, _FIter,
const _Tp&);
236 template<
typename _FIter,
typename _Tp,
typename _Compare>
238 equal_range(_FIter, _FIter,
const _Tp&, _Compare);
240 template<
typename _FIter,
typename _Tp>
242 fill(_FIter, _FIter,
const _Tp&);
244 template<
typename _OIter,
typename _Size,
typename _Tp>
246 fill_n(_OIter, _Size,
const _Tp&);
250 template<
typename _FIter1,
typename _FIter2>
252 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
254 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
256 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
261 #if __cplusplus >= 201103L
262 template<
typename _IIter,
typename _Predicate>
264 find_if_not(_IIter, _IIter, _Predicate);
271 template<
typename _IIter1,
typename _IIter2>
273 includes(_IIter1, _IIter1, _IIter2, _IIter2);
275 template<
typename _IIter1,
typename _IIter2,
typename _Compare>
277 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
279 template<
typename _BIter>
281 inplace_merge(_BIter, _BIter, _BIter);
283 template<
typename _BIter,
typename _Compare>
285 inplace_merge(_BIter, _BIter, _BIter, _Compare);
287 #if __cplusplus >= 201103L
288 template<
typename _RAIter>
290 is_heap(_RAIter, _RAIter);
292 template<
typename _RAIter,
typename _Compare>
294 is_heap(_RAIter, _RAIter, _Compare);
296 template<
typename _RAIter>
298 is_heap_until(_RAIter, _RAIter);
300 template<
typename _RAIter,
typename _Compare>
302 is_heap_until(_RAIter, _RAIter, _Compare);
304 template<
typename _IIter,
typename _Predicate>
306 is_partitioned(_IIter, _IIter, _Predicate);
308 template<
typename _FIter1,
typename _FIter2>
310 is_permutation(_FIter1, _FIter1, _FIter2);
312 template<
typename _FIter1,
typename _FIter2,
313 typename _BinaryPredicate>
315 is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
317 template<
typename _FIter>
319 is_sorted(_FIter, _FIter);
321 template<
typename _FIter,
typename _Compare>
323 is_sorted(_FIter, _FIter, _Compare);
325 template<
typename _FIter>
327 is_sorted_until(_FIter, _FIter);
329 template<
typename _FIter,
typename _Compare>
331 is_sorted_until(_FIter, _FIter, _Compare);
334 template<
typename _FIter1,
typename _FIter2>
336 iter_swap(_FIter1, _FIter2);
338 template<
typename _FIter,
typename _Tp>
340 lower_bound(_FIter, _FIter,
const _Tp&);
342 template<
typename _FIter,
typename _Tp,
typename _Compare>
344 lower_bound(_FIter, _FIter,
const _Tp&, _Compare);
346 template<
typename _RAIter>
348 make_heap(_RAIter, _RAIter);
350 template<
typename _RAIter,
typename _Compare>
352 make_heap(_RAIter, _RAIter, _Compare);
354 template<
typename _Tp>
356 max(
const _Tp&,
const _Tp&);
358 template<
typename _Tp,
typename _Compare>
360 max(
const _Tp&,
const _Tp&, _Compare);
365 template<
typename _Tp>
367 min(
const _Tp&,
const _Tp&);
369 template<
typename _Tp,
typename _Compare>
371 min(
const _Tp&,
const _Tp&, _Compare);
375 #if __cplusplus >= 201103L
376 template<
typename _Tp>
377 pair<const _Tp&, const _Tp&>
378 minmax(
const _Tp&,
const _Tp&);
380 template<
typename _Tp,
typename _Compare>
381 pair<const _Tp&, const _Tp&>
382 minmax(
const _Tp&,
const _Tp&, _Compare);
384 template<
typename _FIter>
386 minmax_element(_FIter, _FIter);
388 template<
typename _FIter,
typename _Compare>
390 minmax_element(_FIter, _FIter, _Compare);
392 template<
typename _Tp>
394 min(initializer_list<_Tp>);
396 template<
typename _Tp,
typename _Compare>
398 min(initializer_list<_Tp>, _Compare);
400 template<
typename _Tp>
402 max(initializer_list<_Tp>);
404 template<
typename _Tp,
typename _Compare>
406 max(initializer_list<_Tp>, _Compare);
408 template<
typename _Tp>
410 minmax(initializer_list<_Tp>);
412 template<
typename _Tp,
typename _Compare>
414 minmax(initializer_list<_Tp>, _Compare);
419 template<
typename _BIter>
421 next_permutation(_BIter, _BIter);
423 template<
typename _BIter,
typename _Compare>
425 next_permutation(_BIter, _BIter, _Compare);
427 #if __cplusplus >= 201103L
428 template<
typename _IIter,
typename _Predicate>
430 none_of(_IIter, _IIter, _Predicate);
436 template<
typename _IIter,
typename _RAIter>
438 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
440 template<
typename _IIter,
typename _RAIter,
typename _Compare>
442 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
446 #if __cplusplus >= 201103L
447 template<
typename _IIter,
typename _OIter1,
448 typename _OIter2,
typename _Predicate>
449 pair<_OIter1, _OIter2>
450 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
452 template<
typename _FIter,
typename _Predicate>
454 partition_point(_FIter, _FIter, _Predicate);
457 template<
typename _RAIter>
459 pop_heap(_RAIter, _RAIter);
461 template<
typename _RAIter,
typename _Compare>
463 pop_heap(_RAIter, _RAIter, _Compare);
465 template<
typename _BIter>
467 prev_permutation(_BIter, _BIter);
469 template<
typename _BIter,
typename _Compare>
471 prev_permutation(_BIter, _BIter, _Compare);
473 template<
typename _RAIter>
475 push_heap(_RAIter, _RAIter);
477 template<
typename _RAIter,
typename _Compare>
479 push_heap(_RAIter, _RAIter, _Compare);
483 template<
typename _FIter,
typename _Tp>
485 remove(_FIter, _FIter,
const _Tp&);
487 template<
typename _FIter,
typename _Predicate>
489 remove_if(_FIter, _FIter, _Predicate);
491 template<
typename _IIter,
typename _OIter,
typename _Tp>
493 remove_copy(_IIter, _IIter, _OIter,
const _Tp&);
495 template<
typename _IIter,
typename _OIter,
typename _Predicate>
497 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
501 template<
typename _IIter,
typename _OIter,
typename _Tp>
503 replace_copy(_IIter, _IIter, _OIter,
const _Tp&,
const _Tp&);
505 template<
typename _Iter,
typename _OIter,
typename _Predicate,
typename _Tp>
507 replace_copy_if(_Iter, _Iter, _OIter, _Predicate,
const _Tp&);
511 template<
typename _BIter>
513 reverse(_BIter, _BIter);
515 template<
typename _BIter,
typename _OIter>
517 reverse_copy(_BIter, _BIter, _OIter);
519 template<
typename _FIter>
521 rotate(_FIter, _FIter, _FIter);
523 template<
typename _FIter,
typename _OIter>
525 rotate_copy(_FIter, _FIter, _FIter, _OIter);
534 #if (__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
535 template<
typename _RAIter,
typename _UGenerator>
537 shuffle(_RAIter, _RAIter, _UGenerator&&);
540 template<
typename _RAIter>
542 sort_heap(_RAIter, _RAIter);
544 template<
typename _RAIter,
typename _Compare>
546 sort_heap(_RAIter, _RAIter, _Compare);
548 template<
typename _BIter,
typename _Predicate>
550 stable_partition(_BIter, _BIter, _Predicate);
552 template<
typename _Tp>
555 #if __cplusplus >= 201103L
556 noexcept(__and_<is_nothrow_move_constructible<_Tp>,
557 is_nothrow_move_assignable<_Tp>>::value)
561 template<
typename _Tp,
size_t _Nm>
563 swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
564 #if __cplusplus >= 201103L
565 noexcept(noexcept(
swap(*__a, *__b)))
569 template<
typename _FIter1,
typename _FIter2>
571 swap_ranges(_FIter1, _FIter1, _FIter2);
575 template<
typename _FIter>
577 unique(_FIter, _FIter);
579 template<
typename _FIter,
typename _BinaryPredicate>
581 unique(_FIter, _FIter, _BinaryPredicate);
585 template<
typename _FIter,
typename _Tp>
587 upper_bound(_FIter, _FIter,
const _Tp&);
589 template<
typename _FIter,
typename _Tp,
typename _Compare>
591 upper_bound(_FIter, _FIter,
const _Tp&, _Compare);
593 _GLIBCXX_END_NAMESPACE_VERSION
595 _GLIBCXX_BEGIN_NAMESPACE_ALGO
597 template<
typename _FIter>
599 adjacent_find(_FIter, _FIter);
601 template<
typename _FIter,
typename _BinaryPredicate>
603 adjacent_find(_FIter, _FIter, _BinaryPredicate);
605 template<
typename _IIter,
typename _Tp>
606 typename iterator_traits<_IIter>::difference_type
607 count(_IIter, _IIter,
const _Tp&);
609 template<
typename _IIter,
typename _Predicate>
610 typename iterator_traits<_IIter>::difference_type
611 count_if(_IIter, _IIter, _Predicate);
613 template<
typename _IIter1,
typename _IIter2>
615 equal(_IIter1, _IIter1, _IIter2);
617 template<
typename _IIter1,
typename _IIter2,
typename _BinaryPredicate>
619 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
621 template<
typename _IIter,
typename _Tp>
623 find(_IIter, _IIter,
const _Tp&);
625 template<
typename _FIter1,
typename _FIter2>
627 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
629 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
631 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
633 template<
typename _IIter,
typename _Predicate>
635 find_if(_IIter, _IIter, _Predicate);
637 template<
typename _IIter,
typename _Funct>
639 for_each(_IIter, _IIter, _Funct);
641 template<
typename _FIter,
typename _Generator>
643 generate(_FIter, _FIter, _Generator);
645 template<
typename _OIter,
typename _Size,
typename _Generator>
647 generate_n(_OIter, _Size, _Generator);
649 template<
typename _IIter1,
typename _IIter2>
651 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
653 template<
typename _IIter1,
typename _IIter2,
typename _Compare>
655 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
657 template<
typename _FIter>
659 max_element(_FIter, _FIter);
661 template<
typename _FIter,
typename _Compare>
663 max_element(_FIter, _FIter, _Compare);
665 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
667 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
669 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
672 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
674 template<
typename _FIter>
676 min_element(_FIter, _FIter);
678 template<
typename _FIter,
typename _Compare>
680 min_element(_FIter, _FIter, _Compare);
682 template<
typename _IIter1,
typename _IIter2>
683 pair<_IIter1, _IIter2>
684 mismatch(_IIter1, _IIter1, _IIter2);
686 template<
typename _IIter1,
typename _IIter2,
typename _BinaryPredicate>
687 pair<_IIter1, _IIter2>
688 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
690 template<
typename _RAIter>
692 nth_element(_RAIter, _RAIter, _RAIter);
694 template<
typename _RAIter,
typename _Compare>
696 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
698 template<
typename _RAIter>
700 partial_sort(_RAIter, _RAIter, _RAIter);
702 template<
typename _RAIter,
typename _Compare>
704 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
706 template<
typename _BIter,
typename _Predicate>
708 partition(_BIter, _BIter, _Predicate);
710 template<
typename _RAIter>
712 random_shuffle(_RAIter, _RAIter);
714 template<
typename _RAIter,
typename _Generator>
716 random_shuffle(_RAIter, _RAIter,
717 #
if __cplusplus >= 201103L
723 template<
typename _FIter,
typename _Tp>
725 replace(_FIter, _FIter,
const _Tp&,
const _Tp&);
727 template<
typename _FIter,
typename _Predicate,
typename _Tp>
729 replace_if(_FIter, _FIter, _Predicate,
const _Tp&);
731 template<
typename _FIter1,
typename _FIter2>
733 search(_FIter1, _FIter1, _FIter2, _FIter2);
735 template<
typename _FIter1,
typename _FIter2,
typename _BinaryPredicate>
737 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
739 template<
typename _FIter,
typename _Size,
typename _Tp>
741 search_n(_FIter, _FIter, _Size,
const _Tp&);
743 template<
typename _FIter,
typename _Size,
typename _Tp,
744 typename _BinaryPredicate>
746 search_n(_FIter, _FIter, _Size,
const _Tp&, _BinaryPredicate);
748 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
750 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
752 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
755 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
757 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
759 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
761 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
764 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
766 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
768 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
770 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
773 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
776 template<
typename _IIter1,
typename _IIter2,
typename _OIter>
778 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
780 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
783 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
785 template<
typename _RAIter>
787 sort(_RAIter, _RAIter);
789 template<
typename _RAIter,
typename _Compare>
791 sort(_RAIter, _RAIter, _Compare);
793 template<
typename _RAIter>
795 stable_sort(_RAIter, _RAIter);
797 template<
typename _RAIter,
typename _Compare>
799 stable_sort(_RAIter, _RAIter, _Compare);
801 template<
typename _IIter,
typename _OIter,
typename _UnaryOperation>
803 transform(_IIter, _IIter, _OIter, _UnaryOperation);
805 template<
typename _IIter1,
typename _IIter2,
typename _OIter,
806 typename _BinaryOperation>
808 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
810 template<
typename _IIter,
typename _OIter>
812 unique_copy(_IIter, _IIter, _OIter);
814 template<
typename _IIter,
typename _OIter,
typename _BinaryPredicate>
816 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
818 _GLIBCXX_END_NAMESPACE_ALGO
821 #ifdef _GLIBCXX_PARALLEL
const _Tp & max(const _Tp &, const _Tp &)
This does what you think it does.
ISO C++ entities toplevel namespace is std.
pair< const _Tp &, const _Tp & > minmax(const _Tp &, const _Tp &)
Determines min and max at once as an ordered pair.
void swap(_Tp &, _Tp &) noexcept(__and_< is_nothrow_move_constructible< _Tp >, is_nothrow_move_assignable< _Tp >>::value)
Swaps two values.
const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.