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