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