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,
24 // 25.1, non-modifying sequence operations:
25 template<class InputIterator
, class Function
>
26 Function
for_each(InputIterator first
, InputIterator last
, Function f
);
27 template<class InputIterator
, class T
>
28 InputIterator
find(InputIterator first
, InputIterator last
,
30 template<class InputIterator
, class Predicate
>
31 InputIterator
find_if(InputIterator first
, InputIterator last
,
33 template<class ForwardIterator1
, class ForwardIterator2
>
35 find_end(ForwardIterator1 first1
, ForwardIterator1 last1
,
36 ForwardIterator2 first2
, ForwardIterator2 last2
);
37 template<class ForwardIterator1
, class ForwardIterator2
,
38 class BinaryPredicate
>
40 find_end(ForwardIterator1 first1
, ForwardIterator1 last1
,
41 ForwardIterator2 first2
, ForwardIterator2 last2
,
42 BinaryPredicate pred
);
43 template<class ForwardIterator1
, class ForwardIterator2
>
45 find_first_of(ForwardIterator1 first1
, ForwardIterator1 last1
,
46 ForwardIterator2 first2
, ForwardIterator2 last2
);
47 template<class ForwardIterator1
, class ForwardIterator2
,
48 class BinaryPredicate
>
50 find_first_of(ForwardIterator1 first1
, ForwardIterator1 last1
,
51 ForwardIterator2 first2
, ForwardIterator2 last2
,
52 BinaryPredicate pred
);
54 template<class ForwardIterator
>
55 ForwardIterator
adjacent_find(ForwardIterator first
,
56 ForwardIterator last
);
58 template<class ForwardIterator
, class BinaryPredicate
>
59 ForwardIterator
adjacent_find(ForwardIterator first
,
60 ForwardIterator last
, BinaryPredicate pred
);
62 template<class InputIterator
, class T
>
63 typename iterator_traits
<InputIterator
>::difference_type
64 count(InputIterator first
, InputIterator last
, const T
& value
);
66 template<class InputIterator
, class Predicate
>
67 typename iterator_traits
<InputIterator
>::difference_type
68 count_if(InputIterator first
, InputIterator last
, Predicate pred
);
69 template<class InputIterator1
, class InputIterator2
>
70 pair
<InputIterator1
, InputIterator2
>
71 mismatch(InputIterator1 first1
, InputIterator1 last1
,
72 InputIterator2 first2
);
74 <class InputIterator1
, class InputIterator2
, class BinaryPredicate
>
75 pair
<InputIterator1
, InputIterator2
>
76 mismatch(InputIterator1 first1
, InputIterator1 last1
,
77 InputIterator2 first2
, BinaryPredicate pred
);
78 template<class InputIterator1
, class InputIterator2
>
79 bool equal(InputIterator1 first1
, InputIterator1 last1
,
80 InputIterator2 first2
);
82 <class InputIterator1
, class InputIterator2
, class BinaryPredicate
>
83 bool equal(InputIterator1 first1
, InputIterator1 last1
,
84 InputIterator2 first2
, BinaryPredicate pred
);
86 template<class ForwardIterator1
, class ForwardIterator2
>
87 ForwardIterator1 search
88 (ForwardIterator1 first1
, ForwardIterator1 last1
,
89 ForwardIterator2 first2
, ForwardIterator2 last2
);
91 template<class ForwardIterator1
, class ForwardIterator2
,
92 class BinaryPredicate
>
93 ForwardIterator1 search
94 (ForwardIterator1 first1
, ForwardIterator1 last1
,
95 ForwardIterator2 first2
, ForwardIterator2 last2
,
96 BinaryPredicate pred
);
98 template<class ForwardIterator
, class Size
, class T
>
99 ForwardIterator
search_n(ForwardIterator first
, ForwardIterator last
,
100 Size count
, const T
& value
);
102 template <class ForwardIterator
, class Size
, class T
, class BinaryPredicate
>
103 ForwardIterator
search_n(ForwardIterator first
, ForwardIterator last
,
104 Size count
, const T
& value
,
105 BinaryPredicate pred
);
107 // 25.2, modifying sequence operations:
109 template<class InputIterator
, class OutputIterator
>
110 OutputIterator
copy(InputIterator first
, InputIterator last
,
111 OutputIterator result
);
112 template<class BidirectionalIterator1
, class BidirectionalIterator2
>
113 BidirectionalIterator2
115 (BidirectionalIterator1 first
, BidirectionalIterator1 last
,
116 BidirectionalIterator2 result
);
118 template<class T
> void swap(T
& a
, T
& b
);
119 template<class ForwardIterator1
, class ForwardIterator2
>
120 ForwardIterator2
swap_ranges(ForwardIterator1 first1
,
121 ForwardIterator1 last1
, ForwardIterator2 first2
);
122 template<class ForwardIterator1
, class ForwardIterator2
>
123 void iter_swap(ForwardIterator1 a
, ForwardIterator2 b
);
124 template<class InputIterator
, class OutputIterator
, class UnaryOperation
>
125 OutputIterator
transform(InputIterator first
, InputIterator last
,
126 OutputIterator result
, UnaryOperation op
);
127 template<class InputIterator1
, class InputIterator2
, class OutputIterator
,
128 class BinaryOperation
>
129 OutputIterator
transform(InputIterator1 first1
, InputIterator1 last1
,
130 InputIterator2 first2
, OutputIterator result
,
131 BinaryOperation binary_op
);
132 template<class ForwardIterator
, class T
>
133 void replace(ForwardIterator first
, ForwardIterator last
,
134 const T
& old_value
, const T
& new_value
);
135 template<class ForwardIterator
, class Predicate
, class T
>
136 void replace_if(ForwardIterator first
, ForwardIterator last
,
137 Predicate pred
, const T
& new_value
);
138 template<class InputIterator
, class OutputIterator
, class T
>
139 OutputIterator
replace_copy(InputIterator first
, InputIterator last
,
140 OutputIterator result
,
141 const T
& old_value
, const T
& new_value
);
142 template<class Iterator
, class OutputIterator
, class Predicate
, class T
>
143 OutputIterator
replace_copy_if(Iterator first
, Iterator last
,
144 OutputIterator result
,
145 Predicate pred
, const T
& new_value
);
146 template<class ForwardIterator
, class T
>
147 void fill(ForwardIterator first
, ForwardIterator last
, const T
& value
);
148 template<class OutputIterator
, class Size
, class T
>
149 void fill_n(OutputIterator first
, Size n
, const T
& value
);
150 template<class ForwardIterator
, class Generator
>
151 void generate(ForwardIterator first
, ForwardIterator last
,
153 template<class OutputIterator
, class Size
, class Generator
>
154 void generate_n(OutputIterator first
, Size n
, Generator gen
);
156 template<class ForwardIterator
, class T
>
157 ForwardIterator
remove(ForwardIterator first
, ForwardIterator last
,
159 template<class ForwardIterator
, class Predicate
>
160 ForwardIterator
remove_if(ForwardIterator first
, ForwardIterator last
,
162 template<class InputIterator
, class OutputIterator
, class T
>
163 OutputIterator
remove_copy(InputIterator first
, InputIterator last
,
164 OutputIterator result
, const T
& value
);
165 template<class InputIterator
, class OutputIterator
, class Predicate
>
166 OutputIterator
remove_copy_if(InputIterator first
, InputIterator last
,
167 OutputIterator result
, Predicate pred
);
168 template<class ForwardIterator
>
169 ForwardIterator
unique(ForwardIterator first
, ForwardIterator last
);
170 template<class ForwardIterator
, class BinaryPredicate
>
171 ForwardIterator
unique(ForwardIterator first
, ForwardIterator last
,
172 BinaryPredicate pred
);
173 template<class InputIterator
, class OutputIterator
>
174 OutputIterator
unique_copy(InputIterator first
, InputIterator last
,
175 OutputIterator result
);
176 template<class InputIterator
, class OutputIterator
, class BinaryPredicate
>
177 OutputIterator
unique_copy(InputIterator first
, InputIterator last
,
178 OutputIterator result
, BinaryPredicate pred
);
179 template<class BidirectionalIterator
>
180 void reverse(BidirectionalIterator first
, BidirectionalIterator last
);
181 template<class BidirectionalIterator
, class OutputIterator
>
182 OutputIterator
reverse_copy(BidirectionalIterator first
,
183 BidirectionalIterator last
,
184 OutputIterator result
);
185 template<class ForwardIterator
>
186 void rotate(ForwardIterator first
, ForwardIterator middle
,
187 ForwardIterator last
);
188 template<class ForwardIterator
, class OutputIterator
>
189 OutputIterator rotate_copy
190 (ForwardIterator first
, ForwardIterator middle
,
191 ForwardIterator last
, OutputIterator result
);
192 template<class RandomAccessIterator
>
193 void random_shuffle(RandomAccessIterator first
,
194 RandomAccessIterator last
);
195 template<class RandomAccessIterator
, class RandomNumberGenerator
>
196 void random_shuffle(RandomAccessIterator first
,
197 RandomAccessIterator last
,
198 RandomNumberGenerator
& rand
);
199 // 25.2.12, partitions:
200 template<class BidirectionalIterator
, class Predicate
>
201 BidirectionalIterator
partition(BidirectionalIterator first
,
202 BidirectionalIterator last
,
204 template<class BidirectionalIterator
, class Predicate
>
205 BidirectionalIterator
stable_partition(BidirectionalIterator first
,
206 BidirectionalIterator last
,
208 // 25.3, sorting and related operations:
210 template<class RandomAccessIterator
>
211 void sort(RandomAccessIterator first
, RandomAccessIterator last
);
212 template<class RandomAccessIterator
, class Compare
>
213 void sort(RandomAccessIterator first
, RandomAccessIterator last
,
215 template<class RandomAccessIterator
>
216 void stable_sort(RandomAccessIterator first
, RandomAccessIterator last
);
217 template<class RandomAccessIterator
, class Compare
>
218 void stable_sort(RandomAccessIterator first
, RandomAccessIterator last
,
220 template<class RandomAccessIterator
>
221 void partial_sort(RandomAccessIterator first
,
222 RandomAccessIterator middle
,
223 RandomAccessIterator last
);
224 template<class RandomAccessIterator
, class Compare
>
225 void partial_sort(RandomAccessIterator first
,
226 RandomAccessIterator middle
,
227 RandomAccessIterator last
, Compare comp
);
228 template<class InputIterator
, class RandomAccessIterator
>
230 partial_sort_copy(InputIterator first
, InputIterator last
,
231 RandomAccessIterator result_first
,
232 RandomAccessIterator result_last
);
233 template<class InputIterator
, class RandomAccessIterator
, class Compare
>
235 partial_sort_copy(InputIterator first
, InputIterator last
,
236 RandomAccessIterator result_first
,
237 RandomAccessIterator result_last
,
239 template<class RandomAccessIterator
>
240 void nth_element(RandomAccessIterator first
, RandomAccessIterator nth
,
241 RandomAccessIterator last
);
242 template<class RandomAccessIterator
, class Compare
>
243 void nth_element(RandomAccessIterator first
, RandomAccessIterator nth
,
244 RandomAccessIterator last
, Compare comp
);
245 // 25.3.3, binary search:
246 template<class ForwardIterator
, class T
>
247 ForwardIterator
lower_bound(ForwardIterator first
, ForwardIterator last
,
249 template<class ForwardIterator
, class T
, class Compare
>
250 ForwardIterator
lower_bound(ForwardIterator first
, ForwardIterator last
,
251 const T
& value
, Compare comp
);
252 template<class ForwardIterator
, class T
>
253 ForwardIterator
upper_bound(ForwardIterator first
, ForwardIterator last
,
255 template<class ForwardIterator
, class T
, class Compare
>
256 ForwardIterator
upper_bound(ForwardIterator first
, ForwardIterator last
,
257 const T
& value
, Compare comp
);
258 template<class ForwardIterator
, class T
>
259 pair
<ForwardIterator
, ForwardIterator
>
260 equal_range(ForwardIterator first
, ForwardIterator last
,
262 template<class ForwardIterator
, class T
, class Compare
>
263 pair
<ForwardIterator
, ForwardIterator
>
264 equal_range(ForwardIterator first
, ForwardIterator last
,
265 const T
& value
, Compare comp
);
266 template<class ForwardIterator
, class T
>
267 bool binary_search(ForwardIterator first
, ForwardIterator last
,
269 template<class ForwardIterator
, class T
, class Compare
>
270 bool binary_search(ForwardIterator first
, ForwardIterator last
,
271 const T
& value
, Compare comp
);
273 template<class InputIterator1
, class InputIterator2
, class OutputIterator
>
274 OutputIterator
merge(InputIterator1 first1
, InputIterator1 last1
,
275 InputIterator2 first2
, InputIterator2 last2
,
276 OutputIterator result
);
277 template<class InputIterator1
, class InputIterator2
, class OutputIterator
,
279 OutputIterator
merge(InputIterator1 first1
, InputIterator1 last1
,
280 InputIterator2 first2
, InputIterator2 last2
,
281 OutputIterator result
, Compare comp
);
282 template<class BidirectionalIterator
>
283 void inplace_merge(BidirectionalIterator first
,
284 BidirectionalIterator middle
,
285 BidirectionalIterator last
);
286 template<class BidirectionalIterator
, class Compare
>
287 void inplace_merge(BidirectionalIterator first
,
288 BidirectionalIterator middle
,
289 BidirectionalIterator last
, Compare comp
);
290 // 25.3.5, set operations:
291 template<class InputIterator1
, class InputIterator2
>
292 bool includes(InputIterator1 first1
, InputIterator1 last1
,
293 InputIterator2 first2
, InputIterator2 last2
);
294 template<class InputIterator1
, class InputIterator2
, class Compare
>
296 (InputIterator1 first1
, InputIterator1 last1
,
297 InputIterator2 first2
, InputIterator2 last2
, Compare comp
);
298 template<class InputIterator1
, class InputIterator2
, class OutputIterator
>
299 OutputIterator
set_union(InputIterator1 first1
, InputIterator1 last1
,
300 InputIterator2 first2
, InputIterator2 last2
,
301 OutputIterator result
);
302 template<class InputIterator1
, class InputIterator2
, class OutputIterator
,
304 OutputIterator
set_union(InputIterator1 first1
, InputIterator1 last1
,
305 InputIterator2 first2
, InputIterator2 last2
,
306 OutputIterator result
, Compare comp
);
307 template<class InputIterator1
, class InputIterator2
, class OutputIterator
>
308 OutputIterator set_intersection
309 (InputIterator1 first1
, InputIterator1 last1
,
310 InputIterator2 first2
, InputIterator2 last2
,
311 OutputIterator result
);
312 template<class InputIterator1
, class InputIterator2
, class OutputIterator
,
314 OutputIterator set_intersection
315 (InputIterator1 first1
, InputIterator1 last1
,
316 InputIterator2 first2
, InputIterator2 last2
,
317 OutputIterator result
, Compare comp
);
318 template<class InputIterator1
, class InputIterator2
, class OutputIterator
>
319 OutputIterator set_difference
320 (InputIterator1 first1
, InputIterator1 last1
,
321 InputIterator2 first2
, InputIterator2 last2
,
322 OutputIterator result
);
323 template<class InputIterator1
, class InputIterator2
, class OutputIterator
,
325 OutputIterator set_difference
326 (InputIterator1 first1
, InputIterator1 last1
,
327 InputIterator2 first2
, InputIterator2 last2
,
328 OutputIterator result
, Compare comp
);
329 template<class InputIterator1
, class InputIterator2
, class OutputIterator
>
331 set_symmetric_difference(InputIterator1 first1
, InputIterator1 last1
,
332 InputIterator2 first2
, InputIterator2 last2
,
333 OutputIterator result
);
334 template<class InputIterator1
, class InputIterator2
, class OutputIterator
,
337 set_symmetric_difference(InputIterator1 first1
, InputIterator1 last1
,
338 InputIterator2 first2
, InputIterator2 last2
,
339 OutputIterator result
, Compare comp
);
340 // 25.3.6, heap operations:
341 template<class RandomAccessIterator
>
342 void push_heap(RandomAccessIterator first
, RandomAccessIterator last
);
343 template<class RandomAccessIterator
, class Compare
>
344 void push_heap(RandomAccessIterator first
, RandomAccessIterator last
,
346 template<class RandomAccessIterator
>
347 void pop_heap(RandomAccessIterator first
, RandomAccessIterator last
);
348 template<class RandomAccessIterator
, class Compare
>
349 void pop_heap(RandomAccessIterator first
, RandomAccessIterator last
,
351 template<class RandomAccessIterator
>
352 void make_heap(RandomAccessIterator first
, RandomAccessIterator last
);
353 template<class RandomAccessIterator
, class Compare
>
354 void make_heap(RandomAccessIterator first
, RandomAccessIterator last
,
356 template<class RandomAccessIterator
>
357 void sort_heap(RandomAccessIterator first
, RandomAccessIterator last
);
358 template<class RandomAccessIterator
, class Compare
>
359 void sort_heap(RandomAccessIterator first
, RandomAccessIterator last
,
362 // 25.3.7, minimum and maximum:
363 template<class T
> const T
& min(const T
& a
, const T
& b
);
364 template<class T
, class Compare
>
365 const T
& min(const T
& a
, const T
& b
, Compare comp
);
366 template<class T
> const T
& max(const T
& a
, const T
& b
);
367 template<class T
, class Compare
>
368 const T
& max(const T
& a
, const T
& b
, Compare comp
);
369 template<class ForwardIterator
>
370 ForwardIterator min_element
371 (ForwardIterator first
, ForwardIterator last
);
372 template<class ForwardIterator
, class Compare
>
373 ForwardIterator
min_element(ForwardIterator first
, ForwardIterator last
,
375 template<class ForwardIterator
>
376 ForwardIterator max_element
377 (ForwardIterator first
, ForwardIterator last
);
378 template<class ForwardIterator
, class Compare
>
379 ForwardIterator
max_element(ForwardIterator first
, ForwardIterator last
,
381 template<class InputIterator1
, class InputIterator2
>
382 bool lexicographical_compare
383 (InputIterator1 first1
, InputIterator1 last1
,
384 InputIterator2 first2
, InputIterator2 last2
);
385 template<class InputIterator1
, class InputIterator2
, class Compare
>
386 bool lexicographical_compare
387 (InputIterator1 first1
, InputIterator1 last1
,
388 InputIterator2 first2
, InputIterator2 last2
,
391 // 25.3.9, permutations
392 template<class BidirectionalIterator
>
393 bool next_permutation(BidirectionalIterator first
,
394 BidirectionalIterator last
);
395 template<class BidirectionalIterator
, class Compare
>
396 bool next_permutation(BidirectionalIterator first
,
397 BidirectionalIterator last
, Compare comp
);
398 template<class BidirectionalIterator
>
399 bool prev_permutation(BidirectionalIterator first
,
400 BidirectionalIterator last
);
401 template<class BidirectionalIterator
, class Compare
>
402 bool prev_permutation(BidirectionalIterator first
,
403 BidirectionalIterator last
, Compare comp
);