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