1// <algorithm> Forward declarations -*- C++ -*-
2
3// Copyright (C) 2007-2014 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++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