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