Home | History | Annotate | Download | only in bits
      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