1 // <algorithm> declarations -*- C++ -*- 2 3 // Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. 4 // 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) 9 // any later version. 10 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. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 // <http://www.gnu.org/licenses/>. 24 25 /** @file bits/algorithmfwd.h 26 * This is an internal header file, included by other library headers. 27 * You should not attempt to use it directly. 28 */ 29 30 #ifndef _GLIBCXX_ALGORITHMFWD_H 31 #define _GLIBCXX_ALGORITHMFWD_H 1 32 33 #pragma GCC system_header 34 35 #include <bits/c++config.h> 36 #include <bits/stl_pair.h> 37 #include <bits/stl_iterator_base_types.h> 38 #include <initializer_list> 39 40 _GLIBCXX_BEGIN_NAMESPACE(std) 41 42 /* 43 adjacent_find 44 all_of (C++0x) 45 any_of (C++0x) 46 binary_search 47 copy 48 copy_backward 49 copy_if (C++0x) 50 copy_n (C++0x) 51 count 52 count_if 53 equal 54 equal_range 55 fill 56 fill_n 57 find 58 find_end 59 find_first_of 60 find_if 61 find_if_not (C++0x) 62 for_each 63 generate 64 generate_n 65 includes 66 inplace_merge 67 is_heap (C++0x) 68 is_heap_until (C++0x) 69 is_partitioned (C++0x) 70 is_sorted (C++0x) 71 is_sorted_until (C++0x) 72 iter_swap 73 lexicographical_compare 74 lower_bound 75 make_heap 76 max 77 max_element 78 merge 79 min 80 min_element 81 minmax (C++0x) 82 minmax_element (C++0x) 83 mismatch 84 next_permutation 85 none_of (C++0x) 86 nth_element 87 partial_sort 88 partial_sort_copy 89 partition 90 partition_copy (C++0x) 91 partition_point (C++0x) 92 pop_heap 93 prev_permutation 94 push_heap 95 random_shuffle 96 remove 97 remove_copy 98 remove_copy_if 99 remove_if 100 replace 101 replace_copy 102 replace_copy_if 103 replace_if 104 reverse 105 reverse_copy 106 rotate 107 rotate_copy 108 search 109 search_n 110 set_difference 111 set_intersection 112 set_symmetric_difference 113 set_union 114 sort 115 sort_heap 116 stable_partition 117 stable_sort 118 swap 119 swap_ranges 120 transform 121 unique 122 unique_copy 123 upper_bound 124 */ 125 126 /** 127 * @defgroup algorithms Algorithms 128 * 129 * Components for performing algorithmic operations. Includes 130 * non-modifying sequence, modifying (mutating) sequence, sorting, 131 * searching, merge, partition, heap, set, minima, maxima, and 132 * permutation operations. 133 */ 134 135 /** 136 * @defgroup mutating_algorithms Mutating Algorithms 137 * @ingroup algorithms 138 */ 139 140 /** 141 * @defgroup non_mutating_algorithms Non-Mutating Algorithms 142 * @ingroup algorithms 143 */ 144 145 /** 146 * @defgroup sorting_algorithms Sorting Algorithms 147 * @ingroup algorithms 148 */ 149 150 /** 151 * @defgroup set_algorithms Set Operation Algorithms 152 * @ingroup sorting_algorithms 153 * 154 * These algorithms are common set operations performed on sequences 155 * that are already sorted. The number of comparisons will be 156 * linear. 157 */ 158 159 /** 160 * @defgroup binary_search_algorithms Binary Search Algorithms 161 * @ingroup sorting_algorithms 162 * 163 * These algorithms are variations of a classic binary search, and 164 * all assume that the sequence being searched is already sorted. 165 * 166 * The number of comparisons will be logarithmic (and as few as 167 * possible). The number of steps through the sequence will be 168 * logarithmic for random-access iterators (e.g., pointers), and 169 * linear otherwise. 170 * 171 * The LWG has passed Defect Report 270, which notes: <em>The 172 * proposed resolution reinterprets binary search. Instead of 173 * thinking about searching for a value in a sorted range, we view 174 * that as an important special case of a more general algorithm: 175 * searching for the partition point in a partitioned range. We 176 * also add a guarantee that the old wording did not: we ensure that 177 * the upper bound is no earlier than the lower bound, that the pair 178 * returned by equal_range is a valid range, and that the first part 179 * of that pair is the lower bound.</em> 180 * 181 * The actual effect of the first sentence is that a comparison 182 * functor passed by the user doesn't necessarily need to induce a 183 * strict weak ordering relation. Rather, it partitions the range. 184 */ 185 186 // adjacent_find 187 188 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 189 template<typename _IIter, typename _Predicate> 190 bool 191 all_of(_IIter, _IIter, _Predicate); 192 193 template<typename _IIter, typename _Predicate> 194 bool 195 any_of(_IIter, _IIter, _Predicate); 196 #endif 197 198 template<typename _FIter, typename _Tp> 199 bool 200 binary_search(_FIter, _FIter, const _Tp&); 201 202 template<typename _FIter, typename _Tp, typename _Compare> 203 bool 204 binary_search(_FIter, _FIter, const _Tp&, _Compare); 205 206 template<typename _IIter, typename _OIter> 207 _OIter 208 copy(_IIter, _IIter, _OIter); 209 210 template<typename _BIter1, typename _BIter2> 211 _BIter2 212 copy_backward(_BIter1, _BIter1, _BIter2); 213 214 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 215 template<typename _IIter, typename _OIter, typename _Predicate> 216 _OIter 217 copy_if(_IIter, _IIter, _OIter, _Predicate); 218 219 template<typename _IIter, typename _Size, typename _OIter> 220 _OIter 221 copy_n(_IIter, _Size, _OIter); 222 #endif 223 224 // count 225 // count_if 226 227 template<typename _FIter, typename _Tp> 228 pair<_FIter, _FIter> 229 equal_range(_FIter, _FIter, const _Tp&); 230 231 template<typename _FIter, typename _Tp, typename _Compare> 232 pair<_FIter, _FIter> 233 equal_range(_FIter, _FIter, const _Tp&, _Compare); 234 235 template<typename _FIter, typename _Tp> 236 void 237 fill(_FIter, _FIter, const _Tp&); 238 239 /* 240 XXX NB: return type different from ISO C++. 241 template<typename _OIter, typename _Size, typename _Tp> 242 void 243 fill_n(_OIter, _Size, const _Tp&); 244 */ 245 246 template<typename _OIter, typename _Size, typename _Tp> 247 _OIter 248 fill_n(_OIter, _Size, const _Tp&); 249 250 // find 251 252 template<typename _FIter1, typename _FIter2> 253 _FIter1 254 find_end(_FIter1, _FIter1, _FIter2, _FIter2); 255 256 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate> 257 _FIter1 258 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); 259 260 // find_first_of 261 // find_if 262 263 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 264 template<typename _IIter, typename _Predicate> 265 _IIter 266 find_if_not(_IIter, _IIter, _Predicate); 267 #endif 268 269 // for_each 270 // generate 271 // generate_n 272 273 template<typename _IIter1, typename _IIter2> 274 bool 275 includes(_IIter1, _IIter1, _IIter2, _IIter2); 276 277 template<typename _IIter1, typename _IIter2, typename _Compare> 278 bool 279 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); 280 281 template<typename _BIter> 282 void 283 inplace_merge(_BIter, _BIter, _BIter); 284 285 template<typename _BIter, typename _Compare> 286 void 287 inplace_merge(_BIter, _BIter, _BIter, _Compare); 288 289 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 290 template<typename _RAIter> 291 bool 292 is_heap(_RAIter, _RAIter); 293 294 template<typename _RAIter, typename _Compare> 295 bool 296 is_heap(_RAIter, _RAIter, _Compare); 297 298 template<typename _RAIter> 299 _RAIter 300 is_heap_until(_RAIter, _RAIter); 301 302 template<typename _RAIter, typename _Compare> 303 _RAIter 304 is_heap_until(_RAIter, _RAIter, _Compare); 305 306 template<typename _IIter, typename _Predicate> 307 bool 308 is_partitioned(_IIter, _IIter, _Predicate); 309 310 template<typename _FIter> 311 bool 312 is_sorted(_FIter, _FIter); 313 314 template<typename _FIter, typename _Compare> 315 bool 316 is_sorted(_FIter, _FIter, _Compare); 317 318 template<typename _FIter> 319 _FIter 320 is_sorted_until(_FIter, _FIter); 321 322 template<typename _FIter, typename _Compare> 323 _FIter 324 is_sorted_until(_FIter, _FIter, _Compare); 325 #endif 326 327 template<typename _FIter1, typename _FIter2> 328 void 329 iter_swap(_FIter1, _FIter2); 330 331 template<typename _FIter, typename _Tp> 332 _FIter 333 lower_bound(_FIter, _FIter, const _Tp&); 334 335 template<typename _FIter, typename _Tp, typename _Compare> 336 _FIter 337 lower_bound(_FIter, _FIter, const _Tp&, _Compare); 338 339 template<typename _RAIter> 340 void 341 make_heap(_RAIter, _RAIter); 342 343 template<typename _RAIter, typename _Compare> 344 void 345 make_heap(_RAIter, _RAIter, _Compare); 346 347 template<typename _Tp> 348 const _Tp& 349 max(const _Tp&, const _Tp&); 350 351 template<typename _Tp, typename _Compare> 352 const _Tp& 353 max(const _Tp&, const _Tp&, _Compare); 354 355 // max_element 356 // merge 357 358 template<typename _Tp> 359 const _Tp& 360 min(const _Tp&, const _Tp&); 361 362 template<typename _Tp, typename _Compare> 363 const _Tp& 364 min(const _Tp&, const _Tp&, _Compare); 365 366 // min_element 367 368 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 369 template<typename _Tp> 370 pair<const _Tp&, const _Tp&> 371 minmax(const _Tp&, const _Tp&); 372 373 template<typename _Tp, typename _Compare> 374 pair<const _Tp&, const _Tp&> 375 minmax(const _Tp&, const _Tp&, _Compare); 376 377 template<typename _FIter> 378 pair<_FIter, _FIter> 379 minmax_element(_FIter, _FIter); 380 381 template<typename _FIter, typename _Compare> 382 pair<_FIter, _FIter> 383 minmax_element(_FIter, _FIter, _Compare); 384 385 template<typename _Tp> 386 _Tp 387 min(initializer_list<_Tp>); 388 389 template<typename _Tp, typename _Compare> 390 _Tp 391 min(initializer_list<_Tp>, _Compare); 392 393 template<typename _Tp> 394 _Tp 395 max(initializer_list<_Tp>); 396 397 template<typename _Tp, typename _Compare> 398 _Tp 399 max(initializer_list<_Tp>, _Compare); 400 401 template<typename _Tp> 402 pair<_Tp, _Tp> 403 minmax(initializer_list<_Tp>); 404 405 template<typename _Tp, typename _Compare> 406 pair<_Tp, _Tp> 407 minmax(initializer_list<_Tp>, _Compare); 408 #endif 409 410 // mismatch 411 412 template<typename _BIter> 413 bool 414 next_permutation(_BIter, _BIter); 415 416 template<typename _BIter, typename _Compare> 417 bool 418 next_permutation(_BIter, _BIter, _Compare); 419 420 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 421 template<typename _IIter, typename _Predicate> 422 bool 423 none_of(_IIter, _IIter, _Predicate); 424 #endif 425 426 // nth_element 427 // partial_sort 428 429 template<typename _IIter, typename _RAIter> 430 _RAIter 431 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter); 432 433 template<typename _IIter, typename _RAIter, typename _Compare> 434 _RAIter 435 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare); 436 437 // partition 438 439 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 440 template<typename _IIter, typename _OIter1, 441 typename _OIter2, typename _Predicate> 442 pair<_OIter1, _OIter2> 443 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate); 444 445 template<typename _FIter, typename _Predicate> 446 _FIter 447 partition_point(_FIter, _FIter, _Predicate); 448 #endif 449 450 template<typename _RAIter> 451 void 452 pop_heap(_RAIter, _RAIter); 453 454 template<typename _RAIter, typename _Compare> 455 void 456 pop_heap(_RAIter, _RAIter, _Compare); 457 458 template<typename _BIter> 459 bool 460 prev_permutation(_BIter, _BIter); 461 462 template<typename _BIter, typename _Compare> 463 bool 464 prev_permutation(_BIter, _BIter, _Compare); 465 466 template<typename _RAIter> 467 void 468 push_heap(_RAIter, _RAIter); 469 470 template<typename _RAIter, typename _Compare> 471 void 472 push_heap(_RAIter, _RAIter, _Compare); 473 474 // random_shuffle 475 476 template<typename _FIter, typename _Tp> 477 _FIter 478 remove(_FIter, _FIter, const _Tp&); 479 480 template<typename _FIter, typename _Predicate> 481 _FIter 482 remove_if(_FIter, _FIter, _Predicate); 483 484 template<typename _IIter, typename _OIter, typename _Tp> 485 _OIter 486 remove_copy(_IIter, _IIter, _OIter, const _Tp&); 487 488 template<typename _IIter, typename _OIter, typename _Predicate> 489 _OIter 490 remove_copy_if(_IIter, _IIter, _OIter, _Predicate); 491 492 // replace 493 494 template<typename _IIter, typename _OIter, typename _Tp> 495 _OIter 496 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&); 497 498 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp> 499 _OIter 500 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&); 501 502 // replace_if 503 504 template<typename _BIter> 505 void 506 reverse(_BIter, _BIter); 507 508 template<typename _BIter, typename _OIter> 509 _OIter 510 reverse_copy(_BIter, _BIter, _OIter); 511 512 template<typename _FIter> 513 void 514 rotate(_FIter, _FIter, _FIter); 515 516 template<typename _FIter, typename _OIter> 517 _OIter 518 rotate_copy(_FIter, _FIter, _FIter, _OIter); 519 520 // search 521 // search_n 522 // set_difference 523 // set_intersection 524 // set_symmetric_difference 525 // set_union 526 527 template<typename _RAIter> 528 void 529 sort_heap(_RAIter, _RAIter); 530 531 template<typename _RAIter, typename _Compare> 532 void 533 sort_heap(_RAIter, _RAIter, _Compare); 534 535 template<typename _BIter, typename _Predicate> 536 _BIter 537 stable_partition(_BIter, _BIter, _Predicate); 538 539 template<typename _Tp> 540 void 541 swap(_Tp&, _Tp&); 542 543 template<typename _Tp, size_t _Nm> 544 void 545 swap(_Tp (&)[_Nm], _Tp (&)[_Nm]); 546 547 template<typename _FIter1, typename _FIter2> 548 _FIter2 549 swap_ranges(_FIter1, _FIter1, _FIter2); 550 551 // transform 552 553 template<typename _FIter> 554 _FIter 555 unique(_FIter, _FIter); 556 557 template<typename _FIter, typename _BinaryPredicate> 558 _FIter 559 unique(_FIter, _FIter, _BinaryPredicate); 560 561 // unique_copy 562 563 template<typename _FIter, typename _Tp> 564 _FIter 565 upper_bound(_FIter, _FIter, const _Tp&); 566 567 template<typename _FIter, typename _Tp, typename _Compare> 568 _FIter 569 upper_bound(_FIter, _FIter, const _Tp&, _Compare); 570 571 _GLIBCXX_END_NAMESPACE 572 573 _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P) 574 575 template<typename _FIter> 576 _FIter 577 adjacent_find(_FIter, _FIter); 578 579 template<typename _FIter, typename _BinaryPredicate> 580 _FIter 581 adjacent_find(_FIter, _FIter, _BinaryPredicate); 582 583 template<typename _IIter, typename _Tp> 584 typename iterator_traits<_IIter>::difference_type 585 count(_IIter, _IIter, const _Tp&); 586 587 template<typename _IIter, typename _Predicate> 588 typename iterator_traits<_IIter>::difference_type 589 count_if(_IIter, _IIter, _Predicate); 590 591 template<typename _IIter1, typename _IIter2> 592 bool 593 equal(_IIter1, _IIter1, _IIter2); 594 595 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate> 596 bool 597 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate); 598 599 template<typename _IIter, typename _Tp> 600 _IIter 601 find(_IIter, _IIter, const _Tp&); 602 603 template<typename _FIter1, typename _FIter2> 604 _FIter1 605 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2); 606 607 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate> 608 _FIter1 609 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); 610 611 template<typename _IIter, typename _Predicate> 612 _IIter 613 find_if(_IIter, _IIter, _Predicate); 614 615 template<typename _IIter, typename _Funct> 616 _Funct 617 for_each(_IIter, _IIter, _Funct); 618 619 template<typename _FIter, typename _Generator> 620 void 621 generate(_FIter, _FIter, _Generator); 622 623 /* 624 XXX NB: return type different from ISO C++. 625 template<typename _OIter, typename _Size, typename _Tp> 626 void 627 generate_n(_OIter, _Size, _Generator); 628 */ 629 630 template<typename _OIter, typename _Size, typename _Generator> 631 _OIter 632 generate_n(_OIter, _Size, _Generator); 633 634 template<typename _IIter1, typename _IIter2> 635 bool 636 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2); 637 638 template<typename _IIter1, typename _IIter2, typename _Compare> 639 bool 640 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); 641 642 template<typename _FIter> 643 _FIter 644 max_element(_FIter, _FIter); 645 646 template<typename _FIter, typename _Compare> 647 _FIter 648 max_element(_FIter, _FIter, _Compare); 649 650 template<typename _IIter1, typename _IIter2, typename _OIter> 651 _OIter 652 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 653 654 template<typename _IIter1, typename _IIter2, typename _OIter, 655 typename _Compare> 656 _OIter 657 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 658 659 template<typename _FIter> 660 _FIter 661 min_element(_FIter, _FIter); 662 663 template<typename _FIter, typename _Compare> 664 _FIter 665 min_element(_FIter, _FIter, _Compare); 666 667 template<typename _IIter1, typename _IIter2> 668 pair<_IIter1, _IIter2> 669 mismatch(_IIter1, _IIter1, _IIter2); 670 671 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate> 672 pair<_IIter1, _IIter2> 673 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate); 674 675 template<typename _RAIter> 676 void 677 nth_element(_RAIter, _RAIter, _RAIter); 678 679 template<typename _RAIter, typename _Compare> 680 void 681 nth_element(_RAIter, _RAIter, _RAIter, _Compare); 682 683 template<typename _RAIter> 684 void 685 partial_sort(_RAIter, _RAIter, _RAIter); 686 687 template<typename _RAIter, typename _Compare> 688 void 689 partial_sort(_RAIter, _RAIter, _RAIter, _Compare); 690 691 template<typename _BIter, typename _Predicate> 692 _BIter 693 partition(_BIter, _BIter, _Predicate); 694 695 template<typename _RAIter> 696 void 697 random_shuffle(_RAIter, _RAIter); 698 699 template<typename _RAIter, typename _Generator> 700 void 701 random_shuffle(_RAIter, _RAIter, _Generator&); 702 703 template<typename _FIter, typename _Tp> 704 void 705 replace(_FIter, _FIter, const _Tp&, const _Tp&); 706 707 template<typename _FIter, typename _Predicate, typename _Tp> 708 void 709 replace_if(_FIter, _FIter, _Predicate, const _Tp&); 710 711 template<typename _FIter1, typename _FIter2> 712 _FIter1 713 search(_FIter1, _FIter1, _FIter2, _FIter2); 714 715 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate> 716 _FIter1 717 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); 718 719 template<typename _FIter, typename _Size, typename _Tp> 720 _FIter 721 search_n(_FIter, _FIter, _Size, const _Tp&); 722 723 template<typename _FIter, typename _Size, typename _Tp, 724 typename _BinaryPredicate> 725 _FIter 726 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate); 727 728 template<typename _IIter1, typename _IIter2, typename _OIter> 729 _OIter 730 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 731 732 template<typename _IIter1, typename _IIter2, typename _OIter, 733 typename _Compare> 734 _OIter 735 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 736 737 template<typename _IIter1, typename _IIter2, typename _OIter> 738 _OIter 739 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 740 741 template<typename _IIter1, typename _IIter2, typename _OIter, 742 typename _Compare> 743 _OIter 744 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 745 746 template<typename _IIter1, typename _IIter2, typename _OIter> 747 _OIter 748 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 749 750 template<typename _IIter1, typename _IIter2, typename _OIter, 751 typename _Compare> 752 _OIter 753 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, 754 _OIter, _Compare); 755 756 template<typename _IIter1, typename _IIter2, typename _OIter> 757 _OIter 758 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 759 760 template<typename _IIter1, typename _IIter2, typename _OIter, 761 typename _Compare> 762 _OIter 763 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 764 765 template<typename _RAIter> 766 void 767 sort(_RAIter, _RAIter); 768 769 template<typename _RAIter, typename _Compare> 770 void 771 sort(_RAIter, _RAIter, _Compare); 772 773 template<typename _RAIter> 774 void 775 stable_sort(_RAIter, _RAIter); 776 777 template<typename _RAIter, typename _Compare> 778 void 779 stable_sort(_RAIter, _RAIter, _Compare); 780 781 template<typename _IIter, typename _OIter, typename _UnaryOperation> 782 _OIter 783 transform(_IIter, _IIter, _OIter, _UnaryOperation); 784 785 template<typename _IIter1, typename _IIter2, typename _OIter, 786 typename _BinaryOperation> 787 _OIter 788 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation); 789 790 template<typename _IIter, typename _OIter> 791 _OIter 792 unique_copy(_IIter, _IIter, _OIter); 793 794 template<typename _IIter, typename _OIter, typename _BinaryPredicate> 795 _OIter 796 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate); 797 798 _GLIBCXX_END_NESTED_NAMESPACE 799 800 #ifdef _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL 801 # include <parallel/algorithmfwd.h> 802 #endif 803 804 #endif 805 806