3 // Copyright (C) 2007, 2008 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,
25 // 25.1, non-modifying sequence operations:
26 template<typename _IIter, typename _Funct>
28 for_each(_IIter, _IIter, _Funct);
30 template<typename _IIter, typename _Tp>
32 find(_IIter, _IIter, const _Tp&);
34 template<typename _IIter, typename _Predicate>
36 find_if(_IIter, _IIter, _Predicate);
38 #ifdef __GXX_EXPERIMENTAL_CXX0X__
39 template<typename _IIter, typename _Predicate>
41 all_of(_IIter, _IIter, _Predicate);
43 template<typename _IIter, typename _Predicate>
45 any_of(_IIter, _IIter, _Predicate);
47 template<typename _IIter, typename _Predicate>
49 none_of(_IIter, _IIter, _Predicate);
51 template<typename _IIter, typename _Predicate>
53 find_if_not(_IIter, _IIter, _Predicate);
56 template<typename _FIter1, typename _FIter2>
58 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
60 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
62 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
64 template<typename _FIter1, typename _FIter2>
66 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
68 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
70 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
72 template<typename _FIter>
74 adjacent_find(_FIter, _FIter);
76 template<typename _FIter, typename _BinaryPredicate>
78 adjacent_find(_FIter, _FIter, _BinaryPredicate);
80 template<typename _IIter, typename _Tp>
81 typename iterator_traits<_IIter>::difference_type
82 count(_IIter, _IIter, const _Tp&);
84 template<typename _IIter, typename _Predicate>
85 typename iterator_traits<_IIter>::difference_type
86 count_if(_IIter, _IIter, _Predicate);
88 template<typename _IIter1, typename _IIter2>
89 pair<_IIter1, _IIter2>
90 mismatch(_IIter1, _IIter1, _IIter2);
92 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
93 pair<_IIter1, _IIter2>
94 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
96 template<typename _IIter1, typename _IIter2>
98 equal(_IIter1, _IIter1, _IIter2);
100 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
102 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
104 template<typename _FIter1, typename _FIter2>
106 search(_FIter1, _FIter1, _FIter2, _FIter2);
108 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
110 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
112 template<typename _FIter, typename _Size, typename _Tp>
114 search_n(_FIter, _FIter, _Size, const _Tp&);
116 template<typename _FIter, typename _Size, typename _Tp,
117 typename _BinaryPredicate>
119 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
121 // 25.2, modifying sequence operations:
123 template<typename _IIter, typename _OIter>
125 copy(_IIter, _IIter, _OIter);
127 template<typename _BIter1, typename _BIter2>
129 copy_backward (_BIter1, _BIter1, _BIter2);
132 template<typename _Tp>
136 #ifdef __GXX_EXPERIMENTAL_CXX0X__
137 template<typename _Tp, size_t _Nm>
139 swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
142 template<typename _FIter1, typename _FIter2>
144 swap_ranges(_FIter1 first1, _FIter1, _FIter2);
146 template<typename _FIter1, typename _FIter2>
148 iter_swap(_FIter1, _FIter2 b);
150 template<typename _IIter, typename _OIter, typename _UnaryOperation>
152 transform(_IIter, _IIter, _OIter, _UnaryOperation op);
154 template<typename _IIter1, typename _IIter2, typename _OIter,
155 typename _BinaryOperation>
157 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
159 template<typename _FIter, typename _Tp>
161 replace(_FIter, _FIter, const _Tp&, const _Tp&);
163 template<typename _FIter, typename _Predicate, typename _Tp>
165 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
167 template<typename _IIter, typename _OIter, typename _Tp>
169 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
171 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
173 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
175 template<typename _FIter, typename _Tp>
177 fill(_FIter, _FIter, const _Tp&);
179 template<typename _OIter, typename _Size, typename _Tp>
181 fill_n(_OIter, _Size n, const _Tp&);
183 template<typename _FIter, typename _Generator>
185 generate(_FIter, _FIter, _Generator);
187 template<typename _OIter, typename _Size, typename _Generator>
189 generate_n(_OIter, _Size, _Generator);
191 template<typename _FIter, typename _Tp>
193 remove(_FIter, _FIter, const _Tp&);
195 template<typename _FIter, typename _Predicate>
197 remove_if(_FIter, _FIter, _Predicate);
199 template<typename _IIter, typename _OIter, typename _Tp>
201 remove_copy(_IIter, _IIter, _OIter, const _Tp&);
203 template<typename _IIter, typename _OIter, typename _Predicate>
205 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
207 #ifdef __GXX_EXPERIMENTAL_CXX0X__
208 template<typename _IIter, typename _OIter, typename _Predicate>
210 copy_if(_IIter, _IIter, _OIter, _Predicate);
212 template<typename _IIter, typename _OIter1,
213 typename _OIter2, typename _Predicate>
214 pair<_OIter1, _OIter2>
215 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
218 template<typename _FIter>
220 unique(_FIter, _FIter);
222 template<typename _FIter, typename _BinaryPredicate>
224 unique(_FIter, _FIter, _BinaryPredicate);
226 template<typename _IIter, typename _OIter>
228 unique_copy(_IIter, _IIter, _OIter);
230 template<typename _IIter, typename _OIter, typename _BinaryPredicate>
232 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
234 template<typename _BIter>
236 reverse(_BIter, _BIter);
238 template<typename _BIter, typename _OIter>
240 reverse_copy(_BIter, _BIter, _OIter);
242 template<typename _FIter>
244 rotate(_FIter, _FIter, _FIter);
246 template<typename _FIter, typename _OIter>
248 rotate_copy (_FIter, _FIter, _FIter, _OIter);
250 template<typename _RAIter>
252 random_shuffle(_RAIter, _RAIter);
254 template<typename _RAIter, typename _Generator>
256 random_shuffle(_RAIter, _RAIter, _Generator&);
258 // 25.2.12, partitions:
259 template<typename _BIter, typename _Predicate>
261 partition(_BIter, _BIter, _Predicate);
263 template<typename _BIter, typename _Predicate>
265 stable_partition(_BIter, _BIter, _Predicate);
267 // 25.3, sorting and related operations:
269 template<typename _RAIter>
271 sort(_RAIter, _RAIter);
273 template<typename _RAIter, typename _Compare>
275 sort(_RAIter, _RAIter, _Compare);
277 template<typename _RAIter>
279 stable_sort(_RAIter, _RAIter);
281 template<typename _RAIter, typename _Compare>
283 stable_sort(_RAIter, _RAIter, _Compare);
285 template<typename _RAIter>
287 partial_sort(_RAIter, _RAIter, _RAIter);
289 template<typename _RAIter, typename _Compare>
291 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
293 template<typename _IIter, typename _RAIter>
295 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
297 template<typename _IIter, typename _RAIter, typename _Compare>
299 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
301 template<typename _RAIter>
303 nth_element(_RAIter, _RAIter, _RAIter);
305 template<typename _RAIter, typename _Compare>
307 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
309 // 25.3.3, binary search:
310 template<typename _FIter, typename _Tp>
312 lower_bound(_FIter, _FIter, const _Tp&);
314 template<typename _FIter, typename _Tp, typename _Compare>
316 lower_bound(_FIter, _FIter, const _Tp&, _Compare);
318 template<typename _FIter, typename _Tp>
320 upper_bound(_FIter, _FIter, const _Tp&);
322 template<typename _FIter, typename _Tp, typename _Compare>
324 upper_bound(_FIter, _FIter, const _Tp&, _Compare);
326 template<typename _FIter, typename _Tp>
328 equal_range(_FIter, _FIter, const _Tp&);
330 template<typename _FIter, typename _Tp, typename _Compare>
332 equal_range(_FIter, _FIter, const _Tp&, _Compare);
334 template<typename _FIter, typename _Tp>
336 binary_search(_FIter, _FIter, const _Tp&);
338 template<typename _FIter, typename _Tp, typename _Compare>
340 binary_search(_FIter, _FIter, const _Tp&, _Compare);
343 template<typename _IIter1, typename _IIter2, typename _OIter>
345 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
347 template<typename _IIter1, typename _IIter2, typename _OIter,
350 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
352 template<typename _BIter>
354 inplace_merge(_BIter, _BIter, _BIter);
356 template<typename _BIter, typename _Compare>
358 inplace_merge(_BIter, _BIter, _BIter, _Compare);
360 // 25.3.5, set operations:
361 template<typename _IIter1, typename _IIter2>
363 includes(_IIter1, _IIter1, _IIter2, _IIter2);
365 template<typename _IIter1, typename _IIter2, typename _Compare>
367 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
369 template<typename _IIter1, typename _IIter2, typename _OIter>
371 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
373 template<typename _IIter1, typename _IIter2, typename _OIter,
376 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
378 template<typename _IIter1, typename _IIter2, typename _OIter>
380 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
382 template<typename _IIter1, typename _IIter2, typename _OIter,
385 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
387 template<typename _IIter1, typename _IIter2, typename _OIter>
389 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
391 template<typename _IIter1, typename _IIter2, typename _OIter,
394 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
396 template<typename _IIter1, typename _IIter2, typename _OIter>
398 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
400 template<typename _IIter1, typename _IIter2, typename _OIter,
403 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
406 // 25.3.6, heap operations:
407 template<typename _RAIter>
409 push_heap(_RAIter, _RAIter);
411 template<typename _RAIter, typename _Compare>
413 push_heap(_RAIter, _RAIter, _Compare);
415 template<typename _RAIter>
417 pop_heap(_RAIter, _RAIter);
419 template<typename _RAIter, typename _Compare>
421 pop_heap(_RAIter, _RAIter, _Compare);
423 template<typename _RAIter>
425 make_heap(_RAIter, _RAIter);
427 template<typename _RAIter, typename _Compare>
429 make_heap(_RAIter, _RAIter, _Compare);
431 template<typename _RAIter>
433 sort_heap(_RAIter, _RAIter);
435 template<typename _RAIter, typename _Compare>
437 sort_heap(_RAIter, _RAIter, _Compare);
439 #ifdef __GXX_EXPERIMENTAL_CXX0X__
440 template<typename _RAIter>
442 is_heap(_RAIter, _RAIter);
444 template<typename _RAIter, typename _Compare>
446 is_heap(_RAIter, _RAIter, _Compare);
448 template<typename _RAIter>
450 is_heap_until(_RAIter, _RAIter);
452 template<typename _RAIter, typename _Compare>
454 is_heap_until(_RAIter, _RAIter, _Compare);
456 template<typename _FIter>
458 is_sorted(_FIter, _FIter);
460 template<typename _FIter, typename _Compare>
462 is_sorted(_FIter, _FIter, _Compare);
464 template<typename _FIter>
466 is_sorted_until(_FIter, _FIter);
468 template<typename _FIter, typename _Compare>
470 is_sorted_until(_FIter, _FIter, _Compare);
473 // 25.3.7, minimum and maximum:
474 template<typename _Tp>
476 min(const _Tp&, const _Tp&);
478 template<typename _Tp, typename _Compare>
480 min(const _Tp&, const _Tp&, _Compare);
482 template<typename _Tp>
484 max(const _Tp&, const _Tp&);
486 template<typename _Tp, typename _Compare>
488 max(const _Tp&, const _Tp&, _Compare);
490 template<typename _FIter>
492 min_element(_FIter, _FIter);
494 template<typename _FIter, typename _Compare>
496 min_element(_FIter, _FIter, _Compare);
498 template<typename _FIter>
500 max_element(_FIter, _FIter);
502 template<typename _FIter, typename _Compare>
504 max_element(_FIter, _FIter, _Compare);
506 #ifdef __GXX_EXPERIMENTAL_CXX0X__
507 template<typename _Tp>
508 pair<const _Tp&, const _Tp&>
509 minmax(const _Tp&, const _Tp&);
511 template<typename _Tp, typename _Compare>
512 pair<const _Tp&, const _Tp&>
513 minmax(const _Tp&, const _Tp&, _Compare);
515 template<typename _FIter>
517 minmax_element(_FIter, _FIter);
519 template<typename _FIter, typename _Compare>
521 minmax_element(_FIter, _FIter, _Compare);
524 template<typename _IIter1, typename _IIter2>
526 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
528 template<typename _IIter1, typename _IIter2, typename _Compare>
530 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
532 // 25.3.9, permutations
533 template<typename _BIter>
535 next_permutation(_BIter, _BIter);
537 template<typename _BIter, typename _Compare>
539 next_permutation(_BIter, _BIter, _Compare);
541 template<typename _BIter>
543 prev_permutation(_BIter, _BIter);
545 template<typename _BIter, typename _Compare>
547 prev_permutation(_BIter, _BIter, _Compare);