3 // Copyright (C) 2007-2015 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 #if __cplusplus < 201103L
140 template<typename _Tp
>
144 template<typename _Tp
, size_t _Nm
>
146 swap(_Tp (&)[_Nm
], _Tp (&)[_Nm
]);
148 // C++11 swap() has complicated SFINAE constraints, test signatures like so:
149 void (*swap_scalars
)(int&, int&) = &swap
;
150 void (*swap_arrays
)(int(&)[5], int(&)[5]) = &swap
;
153 template<typename _FIter1
, typename _FIter2
>
155 swap_ranges(_FIter1 first1
, _FIter1
, _FIter2
);
157 template<typename _FIter1
, typename _FIter2
>
159 iter_swap(_FIter1
, _FIter2 b
);
161 template<typename _IIter
, typename _OIter
, typename _UnaryOperation
>
163 transform(_IIter
, _IIter
, _OIter
, _UnaryOperation op
);
165 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
166 typename _BinaryOperation
>
168 transform(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BinaryOperation
);
170 template<typename _FIter
, typename _Tp
>
172 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&);
174 template<typename _FIter
, typename _Predicate
, typename _Tp
>
176 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&);
178 template<typename _IIter
, typename _OIter
, typename _Tp
>
180 replace_copy(_IIter
, _IIter
, _OIter
, const _Tp
&, const _Tp
&);
182 template<typename _Iter
, typename _OIter
, typename _Predicate
, typename _Tp
>
184 replace_copy_if(_Iter
, _Iter
, _OIter
, _Predicate
, const _Tp
&);
186 template<typename _FIter
, typename _Tp
>
188 fill(_FIter
, _FIter
, const _Tp
&);
190 template<typename _OIter
, typename _Size
, typename _Tp
>
192 fill_n(_OIter
, _Size n
, const _Tp
&);
194 template<typename _FIter
, typename _Generator
>
196 generate(_FIter
, _FIter
, _Generator
);
198 template<typename _OIter
, typename _Size
, typename _Generator
>
200 generate_n(_OIter
, _Size
, _Generator
);
202 template<typename _FIter
, typename _Tp
>
204 remove(_FIter
, _FIter
, const _Tp
&);
206 template<typename _FIter
, typename _Predicate
>
208 remove_if(_FIter
, _FIter
, _Predicate
);
210 template<typename _IIter
, typename _OIter
, typename _Tp
>
212 remove_copy(_IIter
, _IIter
, _OIter
, const _Tp
&);
214 template<typename _IIter
, typename _OIter
, typename _Predicate
>
216 remove_copy_if(_IIter
, _IIter
, _OIter
, _Predicate
);
218 #if __cplusplus >= 201103L
219 template<typename _IIter
, typename _OIter
, typename _Predicate
>
221 copy_if(_IIter
, _IIter
, _OIter
, _Predicate
);
223 template<typename _IIter
, typename _Size
, typename _OIter
>
225 copy_n(_IIter
, _Size
, _OIter
);
227 template<typename _IIter
, typename _OIter1
,
228 typename _OIter2
, typename _Predicate
>
229 pair
<_OIter1
, _OIter2
>
230 partition_copy(_IIter
, _IIter
, _OIter1
, _OIter2
, _Predicate
);
233 template<typename _FIter
>
235 unique(_FIter
, _FIter
);
237 template<typename _FIter
, typename _BinaryPredicate
>
239 unique(_FIter
, _FIter
, _BinaryPredicate
);
241 template<typename _IIter
, typename _OIter
>
243 unique_copy(_IIter
, _IIter
, _OIter
);
245 template<typename _IIter
, typename _OIter
, typename _BinaryPredicate
>
247 unique_copy(_IIter
, _IIter
, _OIter
, _BinaryPredicate
);
249 template<typename _BIter
>
251 reverse(_BIter
, _BIter
);
253 template<typename _BIter
, typename _OIter
>
255 reverse_copy(_BIter
, _BIter
, _OIter
);
257 template<typename _FIter
>
259 rotate(_FIter
, _FIter
, _FIter
);
261 template<typename _FIter
, typename _OIter
>
263 rotate_copy (_FIter
, _FIter
, _FIter
, _OIter
);
265 template<typename _RAIter
>
267 random_shuffle(_RAIter
, _RAIter
);
269 template<typename _RAIter
, typename _Generator
>
271 random_shuffle(_RAIter
, _RAIter
, _Generator
&);
273 // 25.2.12, partitions:
274 template<typename _BIter
, typename _Predicate
>
276 partition(_BIter
, _BIter
, _Predicate
);
278 template<typename _BIter
, typename _Predicate
>
280 stable_partition(_BIter
, _BIter
, _Predicate
);
282 // 25.3, sorting and related operations:
284 template<typename _RAIter
>
286 sort(_RAIter
, _RAIter
);
288 template<typename _RAIter
, typename _Compare
>
290 sort(_RAIter
, _RAIter
, _Compare
);
292 template<typename _RAIter
>
294 stable_sort(_RAIter
, _RAIter
);
296 template<typename _RAIter
, typename _Compare
>
298 stable_sort(_RAIter
, _RAIter
, _Compare
);
300 template<typename _RAIter
>
302 partial_sort(_RAIter
, _RAIter
, _RAIter
);
304 template<typename _RAIter
, typename _Compare
>
306 partial_sort(_RAIter
, _RAIter
, _RAIter
, _Compare
);
308 template<typename _IIter
, typename _RAIter
>
310 partial_sort_copy(_IIter
, _IIter
, _RAIter
, _RAIter
);
312 template<typename _IIter
, typename _RAIter
, typename _Compare
>
314 partial_sort_copy(_IIter
, _IIter
, _RAIter
, _RAIter
, _Compare
);
316 template<typename _RAIter
>
318 nth_element(_RAIter
, _RAIter
, _RAIter
);
320 template<typename _RAIter
, typename _Compare
>
322 nth_element(_RAIter
, _RAIter
, _RAIter
, _Compare
);
324 // 25.3.3, binary search:
325 template<typename _FIter
, typename _Tp
>
327 lower_bound(_FIter
, _FIter
, const _Tp
&);
329 template<typename _FIter
, typename _Tp
, typename _Compare
>
331 lower_bound(_FIter
, _FIter
, const _Tp
&, _Compare
);
333 template<typename _FIter
, typename _Tp
>
335 upper_bound(_FIter
, _FIter
, const _Tp
&);
337 template<typename _FIter
, typename _Tp
, typename _Compare
>
339 upper_bound(_FIter
, _FIter
, const _Tp
&, _Compare
);
341 template<typename _FIter
, typename _Tp
>
343 equal_range(_FIter
, _FIter
, const _Tp
&);
345 template<typename _FIter
, typename _Tp
, typename _Compare
>
347 equal_range(_FIter
, _FIter
, const _Tp
&, _Compare
);
349 template<typename _FIter
, typename _Tp
>
351 binary_search(_FIter
, _FIter
, const _Tp
&);
353 template<typename _FIter
, typename _Tp
, typename _Compare
>
355 binary_search(_FIter
, _FIter
, const _Tp
&, _Compare
);
358 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
360 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
362 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
365 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
367 template<typename _BIter
>
369 inplace_merge(_BIter
, _BIter
, _BIter
);
371 template<typename _BIter
, typename _Compare
>
373 inplace_merge(_BIter
, _BIter
, _BIter
, _Compare
);
375 // 25.3.5, set operations:
376 template<typename _IIter1
, typename _IIter2
>
378 includes(_IIter1
, _IIter1
, _IIter2
, _IIter2
);
380 template<typename _IIter1
, typename _IIter2
, typename _Compare
>
382 includes(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Compare
);
384 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
386 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
388 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
391 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
393 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
395 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
397 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
400 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
402 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
404 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
406 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
409 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
411 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
413 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
415 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
418 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
421 // 25.3.6, heap operations:
422 template<typename _RAIter
>
424 push_heap(_RAIter
, _RAIter
);
426 template<typename _RAIter
, typename _Compare
>
428 push_heap(_RAIter
, _RAIter
, _Compare
);
430 template<typename _RAIter
>
432 pop_heap(_RAIter
, _RAIter
);
434 template<typename _RAIter
, typename _Compare
>
436 pop_heap(_RAIter
, _RAIter
, _Compare
);
438 template<typename _RAIter
>
440 make_heap(_RAIter
, _RAIter
);
442 template<typename _RAIter
, typename _Compare
>
444 make_heap(_RAIter
, _RAIter
, _Compare
);
446 template<typename _RAIter
>
448 sort_heap(_RAIter
, _RAIter
);
450 template<typename _RAIter
, typename _Compare
>
452 sort_heap(_RAIter
, _RAIter
, _Compare
);
454 #if __cplusplus >= 201103L
455 template<typename _RAIter
>
457 is_heap(_RAIter
, _RAIter
);
459 template<typename _RAIter
, typename _Compare
>
461 is_heap(_RAIter
, _RAIter
, _Compare
);
463 template<typename _RAIter
>
465 is_heap_until(_RAIter
, _RAIter
);
467 template<typename _RAIter
, typename _Compare
>
469 is_heap_until(_RAIter
, _RAIter
, _Compare
);
471 template<typename _FIter
>
473 is_sorted(_FIter
, _FIter
);
475 template<typename _FIter
, typename _Compare
>
477 is_sorted(_FIter
, _FIter
, _Compare
);
479 template<typename _FIter
>
481 is_sorted_until(_FIter
, _FIter
);
483 template<typename _FIter
, typename _Compare
>
485 is_sorted_until(_FIter
, _FIter
, _Compare
);
488 // 25.3.7, minimum and maximum:
489 template<typename _Tp
>
492 min(const _Tp
&, const _Tp
&);
494 template<typename _Tp
, typename _Compare
>
497 min(const _Tp
&, const _Tp
&, _Compare
);
499 template<typename _Tp
>
502 max(const _Tp
&, const _Tp
&);
504 template<typename _Tp
, typename _Compare
>
507 max(const _Tp
&, const _Tp
&, _Compare
);
509 template<typename _FIter
>
512 min_element(_FIter
, _FIter
);
514 template<typename _FIter
, typename _Compare
>
517 min_element(_FIter
, _FIter
, _Compare
);
519 template<typename _FIter
>
522 max_element(_FIter
, _FIter
);
524 template<typename _FIter
, typename _Compare
>
527 max_element(_FIter
, _FIter
, _Compare
);
529 #if __cplusplus >= 201103L
530 template<typename _Tp
>
532 pair
<const _Tp
&, const _Tp
&>
533 minmax(const _Tp
&, const _Tp
&);
535 template<typename _Tp
, typename _Compare
>
537 pair
<const _Tp
&, const _Tp
&>
538 minmax(const _Tp
&, const _Tp
&, _Compare
);
540 template<typename _FIter
>
543 minmax_element(_FIter
, _FIter
);
545 template<typename _FIter
, typename _Compare
>
548 minmax_element(_FIter
, _FIter
, _Compare
);
550 template<typename _Tp
>
553 min(initializer_list
<_Tp
>);
555 template<typename _Tp
, typename _Compare
>
558 min(initializer_list
<_Tp
>, _Compare
);
560 template<typename _Tp
>
563 max(initializer_list
<_Tp
>);
565 template<typename _Tp
, typename _Compare
>
568 max(initializer_list
<_Tp
>, _Compare
);
570 template<typename _Tp
>
573 minmax(initializer_list
<_Tp
>);
575 template<typename _Tp
, typename _Compare
>
578 minmax(initializer_list
<_Tp
>, _Compare
);
581 template<typename _IIter1
, typename _IIter2
>
583 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
);
585 template<typename _IIter1
, typename _IIter2
, typename _Compare
>
587 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Compare
);
589 // 25.3.9, permutations
590 template<typename _BIter
>
592 next_permutation(_BIter
, _BIter
);
594 template<typename _BIter
, typename _Compare
>
596 next_permutation(_BIter
, _BIter
, _Compare
);
598 template<typename _BIter
>
600 prev_permutation(_BIter
, _BIter
);
602 template<typename _BIter
, typename _Compare
>
604 prev_permutation(_BIter
, _BIter
, _Compare
);