libstdc++
bits/algorithmfwd.h
Go to the documentation of this file.
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>
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