Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. // <algorithm> Forward declarations  -*- C++ -*-
  2.  
  3. // Copyright (C) 2007-2013 Free Software Foundation, Inc.
  4. //
  5. // This file is part of the GNU ISO C++ Library.  This library is free
  6. // software; you can redistribute it and/or modify it under the
  7. // terms of the GNU General Public License as published by the
  8. // Free Software Foundation; either version 3, or (at your option)
  9. // any later version.
  10.  
  11. // This library is distributed in the hope that it will be useful,
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. // GNU General Public License for more details.
  15.  
  16. // Under Section 7 of GPL version 3, you are granted additional
  17. // permissions described in the GCC Runtime Library Exception, version
  18. // 3.1, as published by the Free Software Foundation.
  19.  
  20. // You should have received a copy of the GNU General Public License and
  21. // a copy of the GCC Runtime Library Exception along with this program;
  22. // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  23. // <http://www.gnu.org/licenses/>.
  24.  
  25. /** @file bits/algorithmfwd.h
  26.  *  This is an internal header file, included by other library headers.
  27.  *  Do not attempt to use it directly. @headername{algorithm}
  28.  */
  29.  
  30. #ifndef _GLIBCXX_ALGORITHMFWD_H
  31. #define _GLIBCXX_ALGORITHMFWD_H 1
  32.  
  33. #pragma GCC system_header
  34.  
  35. #include <bits/c++config.h>
  36. #include <bits/stl_pair.h>
  37. #include <bits/stl_iterator_base_types.h>
  38. #if __cplusplus >= 201103L
  39. #include <initializer_list>
  40. #endif
  41.  
  42. namespace std _GLIBCXX_VISIBILITY(default)
  43. {
  44. _GLIBCXX_BEGIN_NAMESPACE_VERSION
  45.  
  46.   /*
  47.     adjacent_find
  48.     all_of (C++0x)
  49.     any_of (C++0x)
  50.     binary_search
  51.     copy
  52.     copy_backward
  53.     copy_if (C++0x)
  54.     copy_n (C++0x)
  55.     count
  56.     count_if
  57.     equal
  58.     equal_range
  59.     fill
  60.     fill_n
  61.     find
  62.     find_end
  63.     find_first_of
  64.     find_if
  65.     find_if_not (C++0x)
  66.     for_each
  67.     generate
  68.     generate_n
  69.     includes
  70.     inplace_merge
  71.     is_heap (C++0x)
  72.     is_heap_until (C++0x)
  73.     is_partitioned (C++0x)
  74.     is_sorted (C++0x)
  75.     is_sorted_until (C++0x)
  76.     iter_swap
  77.     lexicographical_compare
  78.     lower_bound
  79.     make_heap
  80.     max
  81.     max_element
  82.     merge
  83.     min
  84.     min_element
  85.     minmax (C++0x)
  86.     minmax_element (C++0x)
  87.     mismatch
  88.     next_permutation
  89.     none_of (C++0x)
  90.     nth_element
  91.     partial_sort
  92.     partial_sort_copy
  93.     partition
  94.     partition_copy (C++0x)
  95.     partition_point (C++0x)
  96.     pop_heap
  97.     prev_permutation
  98.     push_heap
  99.     random_shuffle
  100.     remove
  101.     remove_copy
  102.     remove_copy_if
  103.     remove_if
  104.     replace
  105.     replace_copy
  106.     replace_copy_if
  107.     replace_if
  108.     reverse
  109.     reverse_copy
  110.     rotate
  111.     rotate_copy
  112.     search
  113.     search_n
  114.     set_difference
  115.     set_intersection
  116.     set_symmetric_difference
  117.     set_union
  118.     shuffle (C++0x)
  119.     sort
  120.     sort_heap
  121.     stable_partition
  122.     stable_sort
  123.     swap
  124.     swap_ranges
  125.     transform
  126.     unique
  127.     unique_copy
  128.     upper_bound
  129.   */
  130.  
  131.   /**
  132.    * @defgroup algorithms Algorithms
  133.    *
  134.    * Components for performing algorithmic operations. Includes
  135.    * non-modifying sequence, modifying (mutating) sequence, sorting,
  136.    * searching, merge, partition, heap, set, minima, maxima, and
  137.    * permutation operations.
  138.    */
  139.  
  140.   /**
  141.    * @defgroup mutating_algorithms Mutating
  142.    * @ingroup algorithms
  143.    */
  144.  
  145.   /**
  146.    * @defgroup non_mutating_algorithms Non-Mutating
  147.    * @ingroup algorithms
  148.    */
  149.  
  150.   /**
  151.    * @defgroup sorting_algorithms Sorting
  152.    * @ingroup algorithms
  153.    */
  154.  
  155.   /**
  156.    * @defgroup set_algorithms Set Operation
  157.    * @ingroup sorting_algorithms
  158.    *
  159.    * These algorithms are common set operations performed on sequences
  160.    * that are already sorted. The number of comparisons will be
  161.    * linear.
  162.    */
  163.  
  164.   /**
  165.    * @defgroup binary_search_algorithms Binary Search
  166.    * @ingroup sorting_algorithms
  167.    *
  168.    * These algorithms are variations of a classic binary search, and
  169.    * all assume that the sequence being searched is already sorted.
  170.    *
  171.    * The number of comparisons will be logarithmic (and as few as
  172.    * possible).  The number of steps through the sequence will be
  173.    * logarithmic for random-access iterators (e.g., pointers), and
  174.    * linear otherwise.
  175.    *
  176.    * The LWG has passed Defect Report 270, which notes: <em>The
  177.    * proposed resolution reinterprets binary search. Instead of
  178.    * thinking about searching for a value in a sorted range, we view
  179.    * that as an important special case of a more general algorithm:
  180.    * searching for the partition point in a partitioned range.  We
  181.    * also add a guarantee that the old wording did not: we ensure that
  182.    * the upper bound is no earlier than the lower bound, that the pair
  183.    * returned by equal_range is a valid range, and that the first part
  184.    * of that pair is the lower bound.</em>
  185.    *
  186.    * The actual effect of the first sentence is that a comparison
  187.    * functor passed by the user doesn't necessarily need to induce a
  188.    * strict weak ordering relation.  Rather, it partitions the range.
  189.    */
  190.  
  191.   // adjacent_find
  192.  
  193. #if __cplusplus >= 201103L
  194.   template<typename _IIter, typename _Predicate>
  195.     bool
  196.     all_of(_IIter, _IIter, _Predicate);
  197.  
  198.   template<typename _IIter, typename _Predicate>
  199.     bool
  200.     any_of(_IIter, _IIter, _Predicate);
  201. #endif
  202.  
  203.   template<typename _FIter, typename _Tp>
  204.     bool
  205.     binary_search(_FIter, _FIter, const _Tp&);
  206.  
  207.   template<typename _FIter, typename _Tp, typename _Compare>
  208.     bool
  209.     binary_search(_FIter, _FIter, const _Tp&, _Compare);
  210.  
  211.   template<typename _IIter, typename _OIter>
  212.     _OIter
  213.     copy(_IIter, _IIter, _OIter);
  214.  
  215.   template<typename _BIter1, typename _BIter2>
  216.     _BIter2
  217.     copy_backward(_BIter1, _BIter1, _BIter2);
  218.  
  219. #if __cplusplus >= 201103L
  220.   template<typename _IIter, typename _OIter, typename _Predicate>
  221.     _OIter
  222.     copy_if(_IIter, _IIter, _OIter, _Predicate);
  223.  
  224.   template<typename _IIter, typename _Size, typename _OIter>
  225.     _OIter
  226.     copy_n(_IIter, _Size, _OIter);
  227. #endif
  228.  
  229.   // count
  230.   // count_if
  231.  
  232.   template<typename _FIter, typename _Tp>
  233.     pair<_FIter, _FIter>
  234.     equal_range(_FIter, _FIter, const _Tp&);
  235.  
  236.   template<typename _FIter, typename _Tp, typename _Compare>
  237.     pair<_FIter, _FIter>
  238.     equal_range(_FIter, _FIter, const _Tp&, _Compare);
  239.  
  240.   template<typename _FIter, typename _Tp>
  241.     void
  242.     fill(_FIter, _FIter, const _Tp&);
  243.  
  244.   template<typename _OIter, typename _Size, typename _Tp>
  245.     _OIter
  246.     fill_n(_OIter, _Size, const _Tp&);
  247.  
  248.   // find
  249.  
  250.   template<typename _FIter1, typename _FIter2>
  251.     _FIter1
  252.     find_end(_FIter1, _FIter1, _FIter2, _FIter2);
  253.  
  254.   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
  255.     _FIter1
  256.     find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
  257.  
  258.   // find_first_of
  259.   // find_if
  260.  
  261. #if __cplusplus >= 201103L
  262.   template<typename _IIter, typename _Predicate>
  263.     _IIter
  264.     find_if_not(_IIter, _IIter, _Predicate);
  265. #endif
  266.  
  267.   // for_each
  268.   // generate
  269.   // generate_n
  270.  
  271.   template<typename _IIter1, typename _IIter2>
  272.     bool
  273.     includes(_IIter1, _IIter1, _IIter2, _IIter2);
  274.  
  275.   template<typename _IIter1, typename _IIter2, typename _Compare>
  276.     bool
  277.     includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
  278.  
  279.   template<typename _BIter>
  280.     void
  281.     inplace_merge(_BIter, _BIter, _BIter);
  282.  
  283.   template<typename _BIter, typename _Compare>
  284.     void
  285.     inplace_merge(_BIter, _BIter, _BIter, _Compare);
  286.  
  287. #if __cplusplus >= 201103L
  288.   template<typename _RAIter>
  289.     bool
  290.     is_heap(_RAIter, _RAIter);
  291.  
  292.   template<typename _RAIter, typename _Compare>
  293.     bool
  294.     is_heap(_RAIter, _RAIter, _Compare);
  295.  
  296.   template<typename _RAIter>
  297.     _RAIter
  298.     is_heap_until(_RAIter, _RAIter);
  299.  
  300.   template<typename _RAIter, typename _Compare>
  301.     _RAIter
  302.     is_heap_until(_RAIter, _RAIter, _Compare);
  303.  
  304.   template<typename _IIter, typename _Predicate>
  305.     bool
  306.     is_partitioned(_IIter, _IIter, _Predicate);
  307.  
  308.   template<typename _FIter1, typename _FIter2>
  309.     bool
  310.     is_permutation(_FIter1, _FIter1, _FIter2);
  311.  
  312.   template<typename _FIter1, typename _FIter2,
  313.            typename _BinaryPredicate>
  314.     bool
  315.     is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
  316.  
  317.   template<typename _FIter>
  318.     bool
  319.     is_sorted(_FIter, _FIter);
  320.  
  321.   template<typename _FIter, typename _Compare>
  322.     bool
  323.     is_sorted(_FIter, _FIter, _Compare);
  324.  
  325.   template<typename _FIter>
  326.     _FIter
  327.     is_sorted_until(_FIter, _FIter);
  328.  
  329.   template<typename _FIter, typename _Compare>
  330.     _FIter
  331.     is_sorted_until(_FIter, _FIter, _Compare);
  332. #endif
  333.  
  334.   template<typename _FIter1, typename _FIter2>
  335.     void
  336.     iter_swap(_FIter1, _FIter2);
  337.  
  338.   template<typename _FIter, typename _Tp>
  339.     _FIter
  340.     lower_bound(_FIter, _FIter, const _Tp&);
  341.  
  342.   template<typename _FIter, typename _Tp, typename _Compare>
  343.     _FIter
  344.     lower_bound(_FIter, _FIter, const _Tp&, _Compare);
  345.  
  346.   template<typename _RAIter>
  347.     void
  348.     make_heap(_RAIter, _RAIter);
  349.  
  350.   template<typename _RAIter, typename _Compare>
  351.     void
  352.     make_heap(_RAIter, _RAIter, _Compare);
  353.  
  354.   template<typename _Tp>
  355.     const _Tp&
  356.     max(const _Tp&, const _Tp&);
  357.  
  358.   template<typename _Tp, typename _Compare>
  359.     const _Tp&
  360.     max(const _Tp&, const _Tp&, _Compare);
  361.  
  362.   // max_element
  363.   // merge
  364.  
  365.   template<typename _Tp>
  366.     const _Tp&
  367.     min(const _Tp&, const _Tp&);
  368.  
  369.   template<typename _Tp, typename _Compare>
  370.     const _Tp&
  371.     min(const _Tp&, const _Tp&, _Compare);
  372.  
  373.   // min_element
  374.  
  375. #if __cplusplus >= 201103L
  376.   template<typename _Tp>
  377.     pair<const _Tp&, const _Tp&>
  378.     minmax(const _Tp&, const _Tp&);
  379.  
  380.   template<typename _Tp, typename _Compare>
  381.     pair<const _Tp&, const _Tp&>
  382.     minmax(const _Tp&, const _Tp&, _Compare);
  383.  
  384.   template<typename _FIter>
  385.     pair<_FIter, _FIter>
  386.     minmax_element(_FIter, _FIter);
  387.  
  388.   template<typename _FIter, typename _Compare>
  389.     pair<_FIter, _FIter>
  390.     minmax_element(_FIter, _FIter, _Compare);
  391.  
  392.   template<typename _Tp>
  393.     _Tp
  394.     min(initializer_list<_Tp>);
  395.  
  396.   template<typename _Tp, typename _Compare>
  397.     _Tp
  398.     min(initializer_list<_Tp>, _Compare);
  399.  
  400.   template<typename _Tp>
  401.     _Tp
  402.     max(initializer_list<_Tp>);
  403.  
  404.   template<typename _Tp, typename _Compare>
  405.     _Tp
  406.     max(initializer_list<_Tp>, _Compare);
  407.  
  408.   template<typename _Tp>
  409.     pair<_Tp, _Tp>
  410.     minmax(initializer_list<_Tp>);
  411.  
  412.   template<typename _Tp, typename _Compare>
  413.     pair<_Tp, _Tp>
  414.     minmax(initializer_list<_Tp>, _Compare);
  415. #endif
  416.  
  417.   // mismatch
  418.  
  419.   template<typename _BIter>
  420.     bool
  421.     next_permutation(_BIter, _BIter);
  422.  
  423.   template<typename _BIter, typename _Compare>
  424.     bool
  425.     next_permutation(_BIter, _BIter, _Compare);
  426.  
  427. #if __cplusplus >= 201103L
  428.   template<typename _IIter, typename _Predicate>
  429.     bool
  430.     none_of(_IIter, _IIter, _Predicate);
  431. #endif
  432.  
  433.   // nth_element
  434.   // partial_sort
  435.  
  436.   template<typename _IIter, typename _RAIter>
  437.     _RAIter
  438.     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
  439.  
  440.   template<typename _IIter, typename _RAIter, typename _Compare>
  441.     _RAIter
  442.     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
  443.  
  444.   // partition
  445.  
  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);
  451.  
  452.   template<typename _FIter, typename _Predicate>
  453.     _FIter
  454.     partition_point(_FIter, _FIter, _Predicate);
  455. #endif
  456.  
  457.   template<typename _RAIter>
  458.     void
  459.     pop_heap(_RAIter, _RAIter);
  460.  
  461.   template<typename _RAIter, typename _Compare>
  462.     void
  463.     pop_heap(_RAIter, _RAIter, _Compare);
  464.  
  465.   template<typename _BIter>
  466.     bool
  467.     prev_permutation(_BIter, _BIter);
  468.  
  469.   template<typename _BIter, typename _Compare>
  470.     bool
  471.     prev_permutation(_BIter, _BIter, _Compare);
  472.  
  473.   template<typename _RAIter>
  474.     void
  475.     push_heap(_RAIter, _RAIter);
  476.  
  477.   template<typename _RAIter, typename _Compare>
  478.     void
  479.     push_heap(_RAIter, _RAIter, _Compare);
  480.  
  481.   // random_shuffle
  482.  
  483.   template<typename _FIter, typename _Tp>
  484.     _FIter
  485.     remove(_FIter, _FIter, const _Tp&);
  486.  
  487.   template<typename _FIter, typename _Predicate>
  488.     _FIter
  489.     remove_if(_FIter, _FIter, _Predicate);
  490.  
  491.   template<typename _IIter, typename _OIter, typename _Tp>
  492.     _OIter
  493.     remove_copy(_IIter, _IIter, _OIter, const _Tp&);
  494.  
  495.   template<typename _IIter, typename _OIter, typename _Predicate>
  496.     _OIter
  497.     remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
  498.  
  499.   // replace
  500.  
  501.   template<typename _IIter, typename _OIter, typename _Tp>
  502.     _OIter
  503.     replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
  504.  
  505.   template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
  506.     _OIter
  507.     replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
  508.  
  509.   // replace_if
  510.  
  511.   template<typename _BIter>
  512.     void
  513.     reverse(_BIter, _BIter);
  514.  
  515.   template<typename _BIter, typename _OIter>
  516.     _OIter
  517.     reverse_copy(_BIter, _BIter, _OIter);
  518.  
  519.   template<typename _FIter>
  520.     void
  521.     rotate(_FIter, _FIter, _FIter);
  522.  
  523.   template<typename _FIter, typename _OIter>
  524.     _OIter
  525.     rotate_copy(_FIter, _FIter, _FIter, _OIter);
  526.  
  527.   // search
  528.   // search_n
  529.   // set_difference
  530.   // set_intersection
  531.   // set_symmetric_difference
  532.   // set_union
  533.  
  534. #if (__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
  535.   template<typename _RAIter, typename _UGenerator>
  536.     void
  537.     shuffle(_RAIter, _RAIter, _UGenerator&&);
  538. #endif
  539.  
  540.   template<typename _RAIter>
  541.     void
  542.     sort_heap(_RAIter, _RAIter);
  543.  
  544.   template<typename _RAIter, typename _Compare>
  545.     void
  546.     sort_heap(_RAIter, _RAIter, _Compare);
  547.  
  548.   template<typename _BIter, typename _Predicate>
  549.     _BIter
  550.     stable_partition(_BIter, _BIter, _Predicate);
  551.  
  552.   template<typename _Tp>
  553.     void
  554.     swap(_Tp&, _Tp&)
  555. #if __cplusplus >= 201103L
  556.     noexcept(__and_<is_nothrow_move_constructible<_Tp>,
  557.                     is_nothrow_move_assignable<_Tp>>::value)
  558. #endif
  559.     ;
  560.  
  561.   template<typename _Tp, size_t _Nm>
  562.     void
  563.     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
  564. #if __cplusplus >= 201103L
  565.     noexcept(noexcept(swap(*__a, *__b)))
  566. #endif
  567.     ;
  568.  
  569.   template<typename _FIter1, typename _FIter2>
  570.     _FIter2
  571.     swap_ranges(_FIter1, _FIter1, _FIter2);
  572.  
  573.   // transform
  574.  
  575.   template<typename _FIter>
  576.     _FIter
  577.     unique(_FIter, _FIter);
  578.  
  579.   template<typename _FIter, typename _BinaryPredicate>
  580.     _FIter
  581.     unique(_FIter, _FIter, _BinaryPredicate);
  582.  
  583.   // unique_copy
  584.  
  585.   template<typename _FIter, typename _Tp>
  586.     _FIter
  587.     upper_bound(_FIter, _FIter, const _Tp&);
  588.  
  589.   template<typename _FIter, typename _Tp, typename _Compare>
  590.     _FIter
  591.     upper_bound(_FIter, _FIter, const _Tp&, _Compare);
  592.  
  593. _GLIBCXX_END_NAMESPACE_VERSION
  594.  
  595. _GLIBCXX_BEGIN_NAMESPACE_ALGO
  596.  
  597.   template<typename _FIter>
  598.     _FIter
  599.     adjacent_find(_FIter, _FIter);
  600.  
  601.   template<typename _FIter, typename _BinaryPredicate>
  602.     _FIter
  603.     adjacent_find(_FIter, _FIter, _BinaryPredicate);
  604.  
  605.   template<typename _IIter, typename _Tp>
  606.     typename iterator_traits<_IIter>::difference_type
  607.     count(_IIter, _IIter, const _Tp&);
  608.  
  609.   template<typename _IIter, typename _Predicate>
  610.     typename iterator_traits<_IIter>::difference_type
  611.     count_if(_IIter, _IIter, _Predicate);
  612.  
  613.   template<typename _IIter1, typename _IIter2>
  614.     bool
  615.     equal(_IIter1, _IIter1, _IIter2);
  616.  
  617.   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
  618.     bool
  619.     equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
  620.  
  621.   template<typename _IIter, typename _Tp>
  622.     _IIter
  623.     find(_IIter, _IIter, const _Tp&);
  624.  
  625.   template<typename _FIter1, typename _FIter2>
  626.     _FIter1
  627.     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
  628.  
  629.   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
  630.     _FIter1
  631.     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
  632.  
  633.   template<typename _IIter, typename _Predicate>
  634.     _IIter
  635.     find_if(_IIter, _IIter, _Predicate);
  636.  
  637.   template<typename _IIter, typename _Funct>
  638.     _Funct
  639.     for_each(_IIter, _IIter, _Funct);
  640.  
  641.   template<typename _FIter, typename _Generator>
  642.     void
  643.     generate(_FIter, _FIter, _Generator);
  644.  
  645.   template<typename _OIter, typename _Size, typename _Generator>
  646.     _OIter
  647.     generate_n(_OIter, _Size, _Generator);
  648.  
  649.   template<typename _IIter1, typename _IIter2>
  650.     bool
  651.     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
  652.  
  653.   template<typename _IIter1, typename _IIter2, typename _Compare>
  654.     bool
  655.     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
  656.  
  657.   template<typename _FIter>
  658.     _FIter
  659.     max_element(_FIter, _FIter);
  660.  
  661.   template<typename _FIter, typename _Compare>
  662.     _FIter
  663.     max_element(_FIter, _FIter, _Compare);
  664.  
  665.   template<typename _IIter1, typename _IIter2, typename _OIter>
  666.     _OIter
  667.     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  668.  
  669.   template<typename _IIter1, typename _IIter2, typename _OIter,
  670.            typename _Compare>
  671.     _OIter
  672.     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
  673.  
  674.   template<typename _FIter>
  675.     _FIter
  676.     min_element(_FIter, _FIter);
  677.  
  678.   template<typename _FIter, typename _Compare>
  679.     _FIter
  680.     min_element(_FIter, _FIter, _Compare);
  681.  
  682.   template<typename _IIter1, typename _IIter2>
  683.     pair<_IIter1, _IIter2>
  684.     mismatch(_IIter1, _IIter1, _IIter2);
  685.  
  686.   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
  687.     pair<_IIter1, _IIter2>
  688.     mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
  689.  
  690.   template<typename _RAIter>
  691.     void
  692.     nth_element(_RAIter, _RAIter, _RAIter);
  693.  
  694.   template<typename _RAIter, typename _Compare>
  695.     void
  696.     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
  697.  
  698.   template<typename _RAIter>
  699.     void
  700.     partial_sort(_RAIter, _RAIter, _RAIter);
  701.  
  702.   template<typename _RAIter, typename _Compare>
  703.     void
  704.     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
  705.  
  706.   template<typename _BIter, typename _Predicate>
  707.     _BIter
  708.     partition(_BIter, _BIter, _Predicate);
  709.  
  710.   template<typename _RAIter>
  711.     void
  712.     random_shuffle(_RAIter, _RAIter);
  713.  
  714.   template<typename _RAIter, typename _Generator>
  715.     void
  716.     random_shuffle(_RAIter, _RAIter,
  717. #if __cplusplus >= 201103L
  718.                    _Generator&&);
  719. #else
  720.                    _Generator&);
  721. #endif
  722.  
  723.   template<typename _FIter, typename _Tp>
  724.     void
  725.     replace(_FIter, _FIter, const _Tp&, const _Tp&);
  726.  
  727.   template<typename _FIter, typename _Predicate, typename _Tp>
  728.     void
  729.     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
  730.  
  731.   template<typename _FIter1, typename _FIter2>
  732.     _FIter1
  733.     search(_FIter1, _FIter1, _FIter2, _FIter2);
  734.  
  735.   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
  736.     _FIter1
  737.     search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
  738.  
  739.   template<typename _FIter, typename _Size, typename _Tp>
  740.     _FIter
  741.     search_n(_FIter, _FIter, _Size, const _Tp&);
  742.  
  743.   template<typename _FIter, typename _Size, typename _Tp,
  744.            typename _BinaryPredicate>
  745.     _FIter
  746.     search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
  747.  
  748.   template<typename _IIter1, typename _IIter2, typename _OIter>
  749.     _OIter
  750.     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  751.  
  752.   template<typename _IIter1, typename _IIter2, typename _OIter,
  753.            typename _Compare>
  754.     _OIter
  755.     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
  756.  
  757.   template<typename _IIter1, typename _IIter2, typename _OIter>
  758.     _OIter
  759.     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  760.  
  761.   template<typename _IIter1, typename _IIter2, typename _OIter,
  762.            typename _Compare>
  763.     _OIter
  764.     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
  765.  
  766.   template<typename _IIter1, typename _IIter2, typename _OIter>
  767.     _OIter
  768.     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  769.  
  770.   template<typename _IIter1, typename _IIter2, typename _OIter,
  771.            typename _Compare>
  772.     _OIter
  773.     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
  774.                              _OIter, _Compare);
  775.  
  776.   template<typename _IIter1, typename _IIter2, typename _OIter>
  777.     _OIter
  778.     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  779.  
  780.   template<typename _IIter1, typename _IIter2, typename _OIter,
  781.            typename _Compare>
  782.     _OIter
  783.     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
  784.  
  785.   template<typename _RAIter>
  786.     void
  787.     sort(_RAIter, _RAIter);
  788.  
  789.   template<typename _RAIter, typename _Compare>
  790.     void
  791.     sort(_RAIter, _RAIter, _Compare);
  792.  
  793.   template<typename _RAIter>
  794.     void
  795.     stable_sort(_RAIter, _RAIter);
  796.  
  797.   template<typename _RAIter, typename _Compare>
  798.     void
  799.     stable_sort(_RAIter, _RAIter, _Compare);
  800.  
  801.   template<typename _IIter, typename _OIter, typename _UnaryOperation>
  802.     _OIter
  803.     transform(_IIter, _IIter, _OIter, _UnaryOperation);
  804.  
  805.   template<typename _IIter1, typename _IIter2, typename _OIter,
  806.            typename _BinaryOperation>
  807.     _OIter
  808.     transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
  809.  
  810.   template<typename _IIter, typename _OIter>
  811.     _OIter
  812.     unique_copy(_IIter, _IIter, _OIter);
  813.  
  814.   template<typename _IIter, typename _OIter, typename _BinaryPredicate>
  815.     _OIter
  816.     unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
  817.  
  818. _GLIBCXX_END_NAMESPACE_ALGO
  819. } // namespace std
  820.  
  821. #ifdef _GLIBCXX_PARALLEL
  822. # include <parallel/algorithmfwd.h>
  823. #endif
  824.  
  825. #endif
  826.  
  827.