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 #if __cplusplus >= 201103L
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 #if __cplusplus >= 201103L
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 #if __cplusplus >= 201103L
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 #if __cplusplus >= 201103L
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 #if __cplusplus >= 201103L
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
);