3 // Copyright (C) 2007, 2008, 2009 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 3, 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 COPYING3. If not see
18 // <http://www.gnu.org/licenses/>.
24 // 25.1, non-modifying sequence operations:
25 template<typename _IIter, typename _Funct>
27 for_each(_IIter, _IIter, _Funct);
29 template<typename _IIter, typename _Tp>
31 find(_IIter, _IIter, const _Tp&);
33 template<typename _IIter, typename _Predicate>
35 find_if(_IIter, _IIter, _Predicate);
37 #ifdef __GXX_EXPERIMENTAL_CXX0X__
38 template<typename _IIter, typename _Predicate>
40 all_of(_IIter, _IIter, _Predicate);
42 template<typename _IIter, typename _Predicate>
44 any_of(_IIter, _IIter, _Predicate);
46 template<typename _IIter, typename _Predicate>
48 none_of(_IIter, _IIter, _Predicate);
50 template<typename _IIter, typename _Predicate>
52 find_if_not(_IIter, _IIter, _Predicate);
54 template<typename _IIter, typename _Predicate>
56 is_partitioned(_IIter, _IIter, _Predicate);
58 template<typename _FIter, typename _Predicate>
60 partition_point(_FIter, _FIter, _Predicate);
63 template<typename _FIter1, typename _FIter2>
65 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
67 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
69 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
71 template<typename _FIter1, typename _FIter2>
73 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
75 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
77 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
79 template<typename _FIter>
81 adjacent_find(_FIter, _FIter);
83 template<typename _FIter, typename _BinaryPredicate>
85 adjacent_find(_FIter, _FIter, _BinaryPredicate);
87 template<typename _IIter, typename _Tp>
88 typename iterator_traits<_IIter>::difference_type
89 count(_IIter, _IIter, const _Tp&);
91 template<typename _IIter, typename _Predicate>
92 typename iterator_traits<_IIter>::difference_type
93 count_if(_IIter, _IIter, _Predicate);
95 template<typename _IIter1, typename _IIter2>
96 pair<_IIter1, _IIter2>
97 mismatch(_IIter1, _IIter1, _IIter2);
99 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
100 pair<_IIter1, _IIter2>
101 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
103 template<typename _IIter1, typename _IIter2>
105 equal(_IIter1, _IIter1, _IIter2);
107 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
109 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
111 template<typename _FIter1, typename _FIter2>
113 search(_FIter1, _FIter1, _FIter2, _FIter2);
115 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
117 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
119 template<typename _FIter, typename _Size, typename _Tp>
121 search_n(_FIter, _FIter, _Size, const _Tp&);
123 template<typename _FIter, typename _Size, typename _Tp,
124 typename _BinaryPredicate>
126 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
128 // 25.2, modifying sequence operations:
130 template<typename _IIter, typename _OIter>
132 copy(_IIter, _IIter, _OIter);
134 template<typename _BIter1, typename _BIter2>
136 copy_backward (_BIter1, _BIter1, _BIter2);
139 template<typename _Tp>
143 #ifdef __GXX_EXPERIMENTAL_CXX0X__
144 template<typename _Tp, size_t _Nm>
146 swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
149 template<typename _FIter1, typename _FIter2>
151 swap_ranges(_FIter1 first1, _FIter1, _FIter2);
153 template<typename _FIter1, typename _FIter2>
155 iter_swap(_FIter1, _FIter2 b);
157 template<typename _IIter, typename _OIter, typename _UnaryOperation>
159 transform(_IIter, _IIter, _OIter, _UnaryOperation op);
161 template<typename _IIter1, typename _IIter2, typename _OIter,
162 typename _BinaryOperation>
164 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
166 template<typename _FIter, typename _Tp>
168 replace(_FIter, _FIter, const _Tp&, const _Tp&);
170 template<typename _FIter, typename _Predicate, typename _Tp>
172 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
174 template<typename _IIter, typename _OIter, typename _Tp>
176 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
178 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
180 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
182 template<typename _FIter, typename _Tp>
184 fill(_FIter, _FIter, const _Tp&);
186 template<typename _OIter, typename _Size, typename _Tp>
188 fill_n(_OIter, _Size n, const _Tp&);
190 template<typename _FIter, typename _Generator>
192 generate(_FIter, _FIter, _Generator);
194 template<typename _OIter, typename _Size, typename _Generator>
196 generate_n(_OIter, _Size, _Generator);
198 template<typename _FIter, typename _Tp>
200 remove(_FIter, _FIter, const _Tp&);
202 template<typename _FIter, typename _Predicate>
204 remove_if(_FIter, _FIter, _Predicate);
206 template<typename _IIter, typename _OIter, typename _Tp>
208 remove_copy(_IIter, _IIter, _OIter, const _Tp&);
210 template<typename _IIter, typename _OIter, typename _Predicate>
212 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
214 #ifdef __GXX_EXPERIMENTAL_CXX0X__
215 template<typename _IIter, typename _OIter, typename _Predicate>
217 copy_if(_IIter, _IIter, _OIter, _Predicate);
219 template<typename _IIter, typename _Size, typename _OIter>
221 copy_n(_IIter, _Size, _OIter);
223 template<typename _IIter, typename _OIter1,
224 typename _OIter2, typename _Predicate>
225 pair<_OIter1, _OIter2>
226 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
229 template<typename _FIter>
231 unique(_FIter, _FIter);
233 template<typename _FIter, typename _BinaryPredicate>
235 unique(_FIter, _FIter, _BinaryPredicate);
237 template<typename _IIter, typename _OIter>
239 unique_copy(_IIter, _IIter, _OIter);
241 template<typename _IIter, typename _OIter, typename _BinaryPredicate>
243 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
245 template<typename _BIter>
247 reverse(_BIter, _BIter);
249 template<typename _BIter, typename _OIter>
251 reverse_copy(_BIter, _BIter, _OIter);
253 template<typename _FIter>
255 rotate(_FIter, _FIter, _FIter);
257 template<typename _FIter, typename _OIter>
259 rotate_copy (_FIter, _FIter, _FIter, _OIter);
261 template<typename _RAIter>
263 random_shuffle(_RAIter, _RAIter);
265 template<typename _RAIter, typename _Generator>
267 random_shuffle(_RAIter, _RAIter, _Generator&);
269 // 25.2.12, partitions:
270 template<typename _BIter, typename _Predicate>
272 partition(_BIter, _BIter, _Predicate);
274 template<typename _BIter, typename _Predicate>
276 stable_partition(_BIter, _BIter, _Predicate);
278 // 25.3, sorting and related operations:
280 template<typename _RAIter>
282 sort(_RAIter, _RAIter);
284 template<typename _RAIter, typename _Compare>
286 sort(_RAIter, _RAIter, _Compare);
288 template<typename _RAIter>
290 stable_sort(_RAIter, _RAIter);
292 template<typename _RAIter, typename _Compare>
294 stable_sort(_RAIter, _RAIter, _Compare);
296 template<typename _RAIter>
298 partial_sort(_RAIter, _RAIter, _RAIter);
300 template<typename _RAIter, typename _Compare>
302 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
304 template<typename _IIter, typename _RAIter>
306 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
308 template<typename _IIter, typename _RAIter, typename _Compare>
310 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
312 template<typename _RAIter>
314 nth_element(_RAIter, _RAIter, _RAIter);
316 template<typename _RAIter, typename _Compare>
318 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
320 // 25.3.3, binary search:
321 template<typename _FIter, typename _Tp>
323 lower_bound(_FIter, _FIter, const _Tp&);
325 template<typename _FIter, typename _Tp, typename _Compare>
327 lower_bound(_FIter, _FIter, const _Tp&, _Compare);
329 template<typename _FIter, typename _Tp>
331 upper_bound(_FIter, _FIter, const _Tp&);
333 template<typename _FIter, typename _Tp, typename _Compare>
335 upper_bound(_FIter, _FIter, const _Tp&, _Compare);
337 template<typename _FIter, typename _Tp>
339 equal_range(_FIter, _FIter, const _Tp&);
341 template<typename _FIter, typename _Tp, typename _Compare>
343 equal_range(_FIter, _FIter, const _Tp&, _Compare);
345 template<typename _FIter, typename _Tp>
347 binary_search(_FIter, _FIter, const _Tp&);
349 template<typename _FIter, typename _Tp, typename _Compare>
351 binary_search(_FIter, _FIter, const _Tp&, _Compare);
354 template<typename _IIter1, typename _IIter2, typename _OIter>
356 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
358 template<typename _IIter1, typename _IIter2, typename _OIter,
361 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
363 template<typename _BIter>
365 inplace_merge(_BIter, _BIter, _BIter);
367 template<typename _BIter, typename _Compare>
369 inplace_merge(_BIter, _BIter, _BIter, _Compare);
371 // 25.3.5, set operations:
372 template<typename _IIter1, typename _IIter2>
374 includes(_IIter1, _IIter1, _IIter2, _IIter2);
376 template<typename _IIter1, typename _IIter2, typename _Compare>
378 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
380 template<typename _IIter1, typename _IIter2, typename _OIter>
382 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
384 template<typename _IIter1, typename _IIter2, typename _OIter,
387 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
389 template<typename _IIter1, typename _IIter2, typename _OIter>
391 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
393 template<typename _IIter1, typename _IIter2, typename _OIter,
396 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
398 template<typename _IIter1, typename _IIter2, typename _OIter>
400 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
402 template<typename _IIter1, typename _IIter2, typename _OIter,
405 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
407 template<typename _IIter1, typename _IIter2, typename _OIter>
409 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
411 template<typename _IIter1, typename _IIter2, typename _OIter,
414 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
417 // 25.3.6, heap operations:
418 template<typename _RAIter>
420 push_heap(_RAIter, _RAIter);
422 template<typename _RAIter, typename _Compare>
424 push_heap(_RAIter, _RAIter, _Compare);
426 template<typename _RAIter>
428 pop_heap(_RAIter, _RAIter);
430 template<typename _RAIter, typename _Compare>
432 pop_heap(_RAIter, _RAIter, _Compare);
434 template<typename _RAIter>
436 make_heap(_RAIter, _RAIter);
438 template<typename _RAIter, typename _Compare>
440 make_heap(_RAIter, _RAIter, _Compare);
442 template<typename _RAIter>
444 sort_heap(_RAIter, _RAIter);
446 template<typename _RAIter, typename _Compare>
448 sort_heap(_RAIter, _RAIter, _Compare);
450 #ifdef __GXX_EXPERIMENTAL_CXX0X__
451 template<typename _RAIter>
453 is_heap(_RAIter, _RAIter);
455 template<typename _RAIter, typename _Compare>
457 is_heap(_RAIter, _RAIter, _Compare);
459 template<typename _RAIter>
461 is_heap_until(_RAIter, _RAIter);
463 template<typename _RAIter, typename _Compare>
465 is_heap_until(_RAIter, _RAIter, _Compare);
467 template<typename _FIter>
469 is_sorted(_FIter, _FIter);
471 template<typename _FIter, typename _Compare>
473 is_sorted(_FIter, _FIter, _Compare);
475 template<typename _FIter>
477 is_sorted_until(_FIter, _FIter);
479 template<typename _FIter, typename _Compare>
481 is_sorted_until(_FIter, _FIter, _Compare);
484 // 25.3.7, minimum and maximum:
485 template<typename _Tp>
487 min(const _Tp&, const _Tp&);
489 template<typename _Tp, typename _Compare>
491 min(const _Tp&, const _Tp&, _Compare);
493 template<typename _Tp>
495 max(const _Tp&, const _Tp&);
497 template<typename _Tp, typename _Compare>
499 max(const _Tp&, const _Tp&, _Compare);
501 template<typename _FIter>
503 min_element(_FIter, _FIter);
505 template<typename _FIter, typename _Compare>
507 min_element(_FIter, _FIter, _Compare);
509 template<typename _FIter>
511 max_element(_FIter, _FIter);
513 template<typename _FIter, typename _Compare>
515 max_element(_FIter, _FIter, _Compare);
517 #ifdef __GXX_EXPERIMENTAL_CXX0X__
518 template<typename _Tp>
519 pair<const _Tp&, const _Tp&>
520 minmax(const _Tp&, const _Tp&);
522 template<typename _Tp, typename _Compare>
523 pair<const _Tp&, const _Tp&>
524 minmax(const _Tp&, const _Tp&, _Compare);
526 template<typename _FIter>
528 minmax_element(_FIter, _FIter);
530 template<typename _FIter, typename _Compare>
532 minmax_element(_FIter, _FIter, _Compare);
534 template<typename _Tp>
536 min(initializer_list<_Tp>);
538 template<typename _Tp, typename _Compare>
540 min(initializer_list<_Tp>, _Compare);
542 template<typename _Tp>
544 max(initializer_list<_Tp>);
546 template<typename _Tp, typename _Compare>
548 max(initializer_list<_Tp>, _Compare);
550 template<typename _Tp>
552 minmax(initializer_list<_Tp>);
554 template<typename _Tp, typename _Compare>
556 minmax(initializer_list<_Tp>, _Compare);
559 template<typename _IIter1, typename _IIter2>
561 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
563 template<typename _IIter1, typename _IIter2, typename _Compare>
565 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
567 // 25.3.9, permutations
568 template<typename _BIter>
570 next_permutation(_BIter, _BIter);
572 template<typename _BIter, typename _Compare>
574 next_permutation(_BIter, _BIter, _Compare);
576 template<typename _BIter>
578 prev_permutation(_BIter, _BIter);
580 template<typename _BIter, typename _Compare>
582 prev_permutation(_BIter, _BIter, _Compare);