1 // <algorithm> declarations -*- C++ -*-
3 // Copyright (C) 2007 Free Software Foundation, Inc.
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 2, or (at your option)
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.
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING. If not, write to the Free
18 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
21 /** @file bits/algorithmfwd.h
22 * This is an internal header file, included by other library headers.
23 * You should not attempt to use it directly.
49 is_sorted_until (C++0x)
51 lexicographical_compare
60 minmax_element (C++0x)
87 set_symmetric_difference
101 #ifndef _GLIBCXX_ALGORITHMFWD_H
102 #define _GLIBCXX_ALGORITHMFWD_H 1
104 #pragma GCC system_header
106 #include <bits/c++config.h>
107 #include <bits/stl_pair.h>
108 #include <bits/stl_iterator_base_types.h>
110 _GLIBCXX_BEGIN_NAMESPACE(std
)
114 template<typename _FIter
, typename _Tp
>
116 binary_search(_FIter
, _FIter
, const _Tp
&);
118 template<typename _FIter
, typename _Tp
, typename _Compare
>
120 binary_search(_FIter
, _FIter
, const _Tp
&, _Compare
);
122 template<typename _IIter
, typename _OIter
>
124 copy(_IIter
, _IIter
, _OIter
);
126 template<typename _BIter1
, typename _BIter2
>
128 copy_backward(_BIter1
, _BIter1
, _BIter2
);
133 template<typename _FIter
, typename _Tp
>
135 equal_range(_FIter
, _FIter
, const _Tp
&);
137 template<typename _FIter
, typename _Tp
, typename _Compare
>
139 equal_range(_FIter
, _FIter
, const _Tp
&, _Compare
);
141 template<typename _FIter
, typename _Tp
>
143 fill(_FIter
, _FIter
, const _Tp
&);
146 XXX NB: return type different from ISO C++.
147 template<typename _OIter, typename _Size, typename _Tp>
149 fill_n(_OIter, _Size, const _Tp&);
152 template<typename _OIter
, typename _Size
, typename _Tp
>
154 fill_n(_OIter
, _Size
, const _Tp
&);
158 template<typename _FIter1
, typename _FIter2
>
160 find_end(_FIter1
, _FIter1
, _FIter2
, _FIter2
);
162 template<typename _FIter1
, typename _FIter2
, typename _BinaryPredicate
>
164 find_end(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BinaryPredicate
);
172 template<typename _IIter1
, typename _IIter2
>
174 includes(_IIter1
, _IIter1
, _IIter2
, _IIter2
);
176 template<typename _IIter1
, typename _IIter2
, typename _Compare
>
178 includes(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Compare
);
180 template<typename _BIter
>
182 inplace_merge(_BIter
, _BIter
, _BIter
);
184 template<typename _BIter
, typename _Compare
>
186 inplace_merge(_BIter
, _BIter
, _BIter
, _Compare
);
188 #ifdef __GXX_EXPERIMENTAL_CXX0X__
189 template<typename _RAIter
>
191 is_heap(_RAIter
, _RAIter
);
193 template<typename _RAIter
, typename _Compare
>
195 is_heap(_RAIter
, _RAIter
, _Compare
);
197 template<typename _RAIter
>
199 is_heap_until(_RAIter
, _RAIter
);
201 template<typename _RAIter
, typename _Compare
>
203 is_heap_until(_RAIter
, _RAIter
, _Compare
);
205 template<typename _FIter
>
207 is_sorted(_FIter
, _FIter
);
209 template<typename _FIter
, typename _Compare
>
211 is_sorted(_FIter
, _FIter
, _Compare
);
213 template<typename _FIter
>
215 is_sorted_until(_FIter
, _FIter
);
217 template<typename _FIter
, typename _Compare
>
219 is_sorted_until(_FIter
, _FIter
, _Compare
);
222 template<typename _FIter1
, typename _FIter2
>
224 iter_swap(_FIter1
, _FIter2
);
226 template<typename _FIter
, typename _Tp
>
228 lower_bound(_FIter
, _FIter
, const _Tp
&);
230 template<typename _FIter
, typename _Tp
, typename _Compare
>
232 lower_bound(_FIter
, _FIter
, const _Tp
&, _Compare
);
234 template<typename _RAIter
>
236 make_heap(_RAIter
, _RAIter
);
238 template<typename _RAIter
, typename _Compare
>
240 make_heap(_RAIter
, _RAIter
, _Compare
);
242 template<typename _Tp
>
244 max(const _Tp
&, const _Tp
&);
246 template<typename _Tp
, typename _Compare
>
248 max(const _Tp
&, const _Tp
&, _Compare
);
253 template<typename _Tp
>
255 min(const _Tp
&, const _Tp
&);
257 template<typename _Tp
, typename _Compare
>
259 min(const _Tp
&, const _Tp
&, _Compare
);
263 #ifdef __GXX_EXPERIMENTAL_CXX0X__
264 template<typename _Tp
>
265 pair
<const _Tp
&, const _Tp
&>
266 minmax(const _Tp
&, const _Tp
&);
268 template<typename _Tp
, typename _Compare
>
269 pair
<const _Tp
&, const _Tp
&>
270 minmax(const _Tp
&, const _Tp
&, _Compare
);
272 template<typename _FIter
>
274 minmax_element(_FIter
, _FIter
);
276 template<typename _FIter
, typename _Compare
>
278 minmax_element(_FIter
, _FIter
, _Compare
);
283 template<typename _BIter
>
285 next_permutation(_BIter
, _BIter
);
287 template<typename _BIter
, typename _Compare
>
289 next_permutation(_BIter
, _BIter
, _Compare
);
294 template<typename _IIter
, typename _RAIter
>
296 partial_sort_copy(_IIter
, _IIter
, _RAIter
, _RAIter
);
298 template<typename _IIter
, typename _RAIter
, typename _Compare
>
300 partial_sort_copy(_IIter
, _IIter
, _RAIter
, _RAIter
, _Compare
);
302 template<typename _RAIter
>
304 pop_heap(_RAIter
, _RAIter
);
306 template<typename _RAIter
, typename _Compare
>
308 pop_heap(_RAIter
, _RAIter
, _Compare
);
310 template<typename _BIter
>
312 prev_permutation(_BIter
, _BIter
);
314 template<typename _BIter
, typename _Compare
>
316 prev_permutation(_BIter
, _BIter
, _Compare
);
318 template<typename _RAIter
>
320 push_heap(_RAIter
, _RAIter
);
322 template<typename _RAIter
, typename _Compare
>
324 push_heap(_RAIter
, _RAIter
, _Compare
);
328 template<typename _FIter
, typename _Tp
>
330 remove(_FIter
, _FIter
, const _Tp
&);
332 template<typename _FIter
, typename _Predicate
>
334 remove_if(_FIter
, _FIter
, _Predicate
);
336 template<typename _IIter
, typename _OIter
, typename _Tp
>
338 remove_copy(_IIter
, _IIter
, _OIter
, const _Tp
&);
340 template<typename _IIter
, typename _OIter
, typename _Predicate
>
342 remove_copy_if(_IIter
, _IIter
, _OIter
, _Predicate
);
346 template<typename _IIter
, typename _OIter
, typename _Tp
>
348 replace_copy(_IIter
, _IIter
, _OIter
, const _Tp
&, const _Tp
&);
350 template<typename _Iter
, typename _OIter
, typename _Predicate
, typename _Tp
>
352 replace_copy_if(_Iter
, _Iter
, _OIter
, _Predicate
, const _Tp
&);
356 template<typename _BIter
>
358 reverse(_BIter
, _BIter
);
360 template<typename _BIter
, typename _OIter
>
362 reverse_copy(_BIter
, _BIter
, _OIter
);
364 template<typename _FIter
>
366 rotate(_FIter
, _FIter
, _FIter
);
368 template<typename _FIter
, typename _OIter
>
370 rotate_copy(_FIter
, _FIter
, _FIter
, _OIter
);
376 // set_symmetric_difference
379 template<typename _RAIter
>
381 sort_heap(_RAIter
, _RAIter
);
383 template<typename _RAIter
, typename _Compare
>
385 sort_heap(_RAIter
, _RAIter
, _Compare
);
387 template<typename _BIter
, typename _Predicate
>
389 stable_partition(_BIter
, _BIter
, _Predicate
);
391 template<typename _Tp
>
395 template<typename _FIter1
, typename _FIter2
>
397 swap_ranges(_FIter1
, _FIter1
, _FIter2
);
401 template<typename _FIter
>
403 unique(_FIter
, _FIter
);
405 template<typename _FIter
, typename _BinaryPredicate
>
407 unique(_FIter
, _FIter
, _BinaryPredicate
);
411 template<typename _FIter
, typename _Tp
>
413 upper_bound(_FIter
, _FIter
, const _Tp
&);
415 template<typename _FIter
, typename _Tp
, typename _Compare
>
417 upper_bound(_FIter
, _FIter
, const _Tp
&, _Compare
);
419 _GLIBCXX_END_NAMESPACE
421 _GLIBCXX_BEGIN_NESTED_NAMESPACE(std
, _GLIBCXX_STD_P
)
423 template<typename _FIter
>
425 adjacent_find(_FIter
, _FIter
);
427 template<typename _FIter
, typename _BinaryPredicate
>
429 adjacent_find(_FIter
, _FIter
, _BinaryPredicate
);
431 template<typename _IIter
, typename _Tp
>
432 typename iterator_traits
<_IIter
>::difference_type
433 count(_IIter
, _IIter
, const _Tp
&);
435 template<typename _IIter
, typename _Predicate
>
436 typename iterator_traits
<_IIter
>::difference_type
437 count_if(_IIter
, _IIter
, _Predicate
);
439 template<typename _IIter1
, typename _IIter2
>
441 equal(_IIter1
, _IIter1
, _IIter2
);
443 template<typename _IIter1
, typename _IIter2
, typename _BinaryPredicate
>
445 equal(_IIter1
, _IIter1
, _IIter2
, _BinaryPredicate
);
447 template<typename _IIter
, typename _Tp
>
449 find(_IIter
, _IIter
, const _Tp
&);
451 template<typename _FIter1
, typename _FIter2
>
453 find_first_of(_FIter1
, _FIter1
, _FIter2
, _FIter2
);
455 template<typename _FIter1
, typename _FIter2
, typename _BinaryPredicate
>
457 find_first_of(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BinaryPredicate
);
459 template<typename _IIter
, typename _Predicate
>
461 find_if(_IIter
, _IIter
, _Predicate
);
463 template<typename _IIter
, typename _Funct
>
465 for_each(_IIter
, _IIter
, _Funct
);
467 template<typename _FIter
, typename _Generator
>
469 generate(_FIter
, _FIter
, _Generator
);
472 XXX NB: return type different from ISO C++.
473 template<typename _OIter, typename _Size, typename _Tp>
475 generate_n(_OIter, _Size, _Generator);
478 template<typename _OIter
, typename _Size
, typename _Generator
>
480 generate_n(_OIter
, _Size
, _Generator
);
482 template<typename _IIter1
, typename _IIter2
>
484 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
);
486 template<typename _IIter1
, typename _IIter2
, typename _Compare
>
488 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Compare
);
490 template<typename _FIter
>
492 max_element(_FIter
, _FIter
);
494 template<typename _FIter
, typename _Compare
>
496 max_element(_FIter
, _FIter
, _Compare
);
498 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
500 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
502 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
505 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
507 template<typename _FIter
>
509 min_element(_FIter
, _FIter
);
511 template<typename _FIter
, typename _Compare
>
513 min_element(_FIter
, _FIter
, _Compare
);
515 template<typename _IIter1
, typename _IIter2
>
516 pair
<_IIter1
, _IIter2
>
517 mismatch(_IIter1
, _IIter1
, _IIter2
);
519 template<typename _IIter1
, typename _IIter2
, typename _BinaryPredicate
>
520 pair
<_IIter1
, _IIter2
>
521 mismatch(_IIter1
, _IIter1
, _IIter2
, _BinaryPredicate
);
523 template<typename _RAIter
>
525 nth_element(_RAIter
, _RAIter
, _RAIter
);
527 template<typename _RAIter
, typename _Compare
>
529 nth_element(_RAIter
, _RAIter
, _RAIter
, _Compare
);
531 template<typename _RAIter
>
533 partial_sort(_RAIter
, _RAIter
, _RAIter
);
535 template<typename _RAIter
, typename _Compare
>
537 partial_sort(_RAIter
, _RAIter
, _RAIter
, _Compare
);
539 template<typename _BIter
, typename _Predicate
>
541 partition(_BIter
, _BIter
, _Predicate
);
543 template<typename _RAIter
>
545 random_shuffle(_RAIter
, _RAIter
);
547 template<typename _RAIter
, typename _Generator
>
549 random_shuffle(_RAIter
, _RAIter
, _Generator
&);
551 template<typename _FIter
, typename _Tp
>
553 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&);
555 template<typename _FIter
, typename _Predicate
, typename _Tp
>
557 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&);
559 template<typename _FIter1
, typename _FIter2
>
561 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
);
563 template<typename _FIter1
, typename _FIter2
, typename _BinaryPredicate
>
565 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BinaryPredicate
);
567 template<typename _FIter
, typename _Size
, typename _Tp
>
569 search_n(_FIter
, _FIter
, _Size
, const _Tp
&);
571 template<typename _FIter
, typename _Size
, typename _Tp
,
572 typename _BinaryPredicate
>
574 search_n(_FIter
, _FIter
, _Size
, const _Tp
&, _BinaryPredicate
);
576 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
578 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
580 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
583 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
585 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
587 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
589 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
592 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
594 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
596 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
598 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
601 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
604 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
606 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
608 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
611 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
613 template<typename _RAIter
>
615 sort(_RAIter
, _RAIter
);
617 template<typename _RAIter
, typename _Compare
>
619 sort(_RAIter
, _RAIter
, _Compare
);
621 template<typename _RAIter
>
623 stable_sort(_RAIter
, _RAIter
);
625 template<typename _RAIter
, typename _Compare
>
627 stable_sort(_RAIter
, _RAIter
, _Compare
);
629 template<typename _IIter
, typename _OIter
, typename _UnaryOperation
>
631 transform(_IIter
, _IIter
, _OIter
, _UnaryOperation
);
633 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
634 typename _BinaryOperation
>
636 transform(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BinaryOperation
);
638 template<typename _IIter
, typename _OIter
>
640 unique_copy(_IIter
, _IIter
, _OIter
);
642 template<typename _IIter
, typename _OIter
, typename _BinaryPredicate
>
644 unique_copy(_IIter
, _IIter
, _OIter
, _BinaryPredicate
);
646 _GLIBCXX_END_NESTED_NAMESPACE
648 #ifdef _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL
649 # include <parallel/algorithmfwd.h>