00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _GLIBCXX_ALGORITHMFWD_H
00031 #define _GLIBCXX_ALGORITHMFWD_H 1
00032
00033 #pragma GCC system_header
00034
00035 #include <bits/c++config.h>
00036 #include <bits/stl_pair.h>
00037 #include <bits/stl_iterator_base_types.h>
00038 #include <initializer_list>
00039
00040 namespace std _GLIBCXX_VISIBILITY(default)
00041 {
00042 _GLIBCXX_BEGIN_NAMESPACE_VERSION
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00192 template<typename _IIter, typename _Predicate>
00193 bool
00194 all_of(_IIter, _IIter, _Predicate);
00195
00196 template<typename _IIter, typename _Predicate>
00197 bool
00198 any_of(_IIter, _IIter, _Predicate);
00199 #endif
00200
00201 template<typename _FIter, typename _Tp>
00202 bool
00203 binary_search(_FIter, _FIter, const _Tp&);
00204
00205 template<typename _FIter, typename _Tp, typename _Compare>
00206 bool
00207 binary_search(_FIter, _FIter, const _Tp&, _Compare);
00208
00209 template<typename _IIter, typename _OIter>
00210 _OIter
00211 copy(_IIter, _IIter, _OIter);
00212
00213 template<typename _BIter1, typename _BIter2>
00214 _BIter2
00215 copy_backward(_BIter1, _BIter1, _BIter2);
00216
00217 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00218 template<typename _IIter, typename _OIter, typename _Predicate>
00219 _OIter
00220 copy_if(_IIter, _IIter, _OIter, _Predicate);
00221
00222 template<typename _IIter, typename _Size, typename _OIter>
00223 _OIter
00224 copy_n(_IIter, _Size, _OIter);
00225 #endif
00226
00227
00228
00229
00230 template<typename _FIter, typename _Tp>
00231 pair<_FIter, _FIter>
00232 equal_range(_FIter, _FIter, const _Tp&);
00233
00234 template<typename _FIter, typename _Tp, typename _Compare>
00235 pair<_FIter, _FIter>
00236 equal_range(_FIter, _FIter, const _Tp&, _Compare);
00237
00238 template<typename _FIter, typename _Tp>
00239 void
00240 fill(_FIter, _FIter, const _Tp&);
00241
00242 template<typename _OIter, typename _Size, typename _Tp>
00243 _OIter
00244 fill_n(_OIter, _Size, const _Tp&);
00245
00246
00247
00248 template<typename _FIter1, typename _FIter2>
00249 _FIter1
00250 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
00251
00252 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
00253 _FIter1
00254 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
00255
00256
00257
00258
00259 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00260 template<typename _IIter, typename _Predicate>
00261 _IIter
00262 find_if_not(_IIter, _IIter, _Predicate);
00263 #endif
00264
00265
00266
00267
00268
00269 template<typename _IIter1, typename _IIter2>
00270 bool
00271 includes(_IIter1, _IIter1, _IIter2, _IIter2);
00272
00273 template<typename _IIter1, typename _IIter2, typename _Compare>
00274 bool
00275 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
00276
00277 template<typename _BIter>
00278 void
00279 inplace_merge(_BIter, _BIter, _BIter);
00280
00281 template<typename _BIter, typename _Compare>
00282 void
00283 inplace_merge(_BIter, _BIter, _BIter, _Compare);
00284
00285 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00286 template<typename _RAIter>
00287 bool
00288 is_heap(_RAIter, _RAIter);
00289
00290 template<typename _RAIter, typename _Compare>
00291 bool
00292 is_heap(_RAIter, _RAIter, _Compare);
00293
00294 template<typename _RAIter>
00295 _RAIter
00296 is_heap_until(_RAIter, _RAIter);
00297
00298 template<typename _RAIter, typename _Compare>
00299 _RAIter
00300 is_heap_until(_RAIter, _RAIter, _Compare);
00301
00302 template<typename _IIter, typename _Predicate>
00303 bool
00304 is_partitioned(_IIter, _IIter, _Predicate);
00305
00306 template<typename _FIter1, typename _FIter2>
00307 bool
00308 is_permutation(_FIter1, _FIter1, _FIter2);
00309
00310 template<typename _FIter1, typename _FIter2,
00311 typename _BinaryPredicate>
00312 bool
00313 is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
00314
00315 template<typename _FIter>
00316 bool
00317 is_sorted(_FIter, _FIter);
00318
00319 template<typename _FIter, typename _Compare>
00320 bool
00321 is_sorted(_FIter, _FIter, _Compare);
00322
00323 template<typename _FIter>
00324 _FIter
00325 is_sorted_until(_FIter, _FIter);
00326
00327 template<typename _FIter, typename _Compare>
00328 _FIter
00329 is_sorted_until(_FIter, _FIter, _Compare);
00330 #endif
00331
00332 template<typename _FIter1, typename _FIter2>
00333 void
00334 iter_swap(_FIter1, _FIter2);
00335
00336 template<typename _FIter, typename _Tp>
00337 _FIter
00338 lower_bound(_FIter, _FIter, const _Tp&);
00339
00340 template<typename _FIter, typename _Tp, typename _Compare>
00341 _FIter
00342 lower_bound(_FIter, _FIter, const _Tp&, _Compare);
00343
00344 template<typename _RAIter>
00345 void
00346 make_heap(_RAIter, _RAIter);
00347
00348 template<typename _RAIter, typename _Compare>
00349 void
00350 make_heap(_RAIter, _RAIter, _Compare);
00351
00352 template<typename _Tp>
00353 const _Tp&
00354 max(const _Tp&, const _Tp&);
00355
00356 template<typename _Tp, typename _Compare>
00357 const _Tp&
00358 max(const _Tp&, const _Tp&, _Compare);
00359
00360
00361
00362
00363 template<typename _Tp>
00364 const _Tp&
00365 min(const _Tp&, const _Tp&);
00366
00367 template<typename _Tp, typename _Compare>
00368 const _Tp&
00369 min(const _Tp&, const _Tp&, _Compare);
00370
00371
00372
00373 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00374 template<typename _Tp>
00375 pair<const _Tp&, const _Tp&>
00376 minmax(const _Tp&, const _Tp&);
00377
00378 template<typename _Tp, typename _Compare>
00379 pair<const _Tp&, const _Tp&>
00380 minmax(const _Tp&, const _Tp&, _Compare);
00381
00382 template<typename _FIter>
00383 pair<_FIter, _FIter>
00384 minmax_element(_FIter, _FIter);
00385
00386 template<typename _FIter, typename _Compare>
00387 pair<_FIter, _FIter>
00388 minmax_element(_FIter, _FIter, _Compare);
00389
00390 template<typename _Tp>
00391 _Tp
00392 min(initializer_list<_Tp>);
00393
00394 template<typename _Tp, typename _Compare>
00395 _Tp
00396 min(initializer_list<_Tp>, _Compare);
00397
00398 template<typename _Tp>
00399 _Tp
00400 max(initializer_list<_Tp>);
00401
00402 template<typename _Tp, typename _Compare>
00403 _Tp
00404 max(initializer_list<_Tp>, _Compare);
00405
00406 template<typename _Tp>
00407 pair<_Tp, _Tp>
00408 minmax(initializer_list<_Tp>);
00409
00410 template<typename _Tp, typename _Compare>
00411 pair<_Tp, _Tp>
00412 minmax(initializer_list<_Tp>, _Compare);
00413 #endif
00414
00415
00416
00417 template<typename _BIter>
00418 bool
00419 next_permutation(_BIter, _BIter);
00420
00421 template<typename _BIter, typename _Compare>
00422 bool
00423 next_permutation(_BIter, _BIter, _Compare);
00424
00425 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00426 template<typename _IIter, typename _Predicate>
00427 bool
00428 none_of(_IIter, _IIter, _Predicate);
00429 #endif
00430
00431
00432
00433
00434 template<typename _IIter, typename _RAIter>
00435 _RAIter
00436 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
00437
00438 template<typename _IIter, typename _RAIter, typename _Compare>
00439 _RAIter
00440 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
00441
00442
00443
00444 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00445 template<typename _IIter, typename _OIter1,
00446 typename _OIter2, typename _Predicate>
00447 pair<_OIter1, _OIter2>
00448 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
00449
00450 template<typename _FIter, typename _Predicate>
00451 _FIter
00452 partition_point(_FIter, _FIter, _Predicate);
00453 #endif
00454
00455 template<typename _RAIter>
00456 void
00457 pop_heap(_RAIter, _RAIter);
00458
00459 template<typename _RAIter, typename _Compare>
00460 void
00461 pop_heap(_RAIter, _RAIter, _Compare);
00462
00463 template<typename _BIter>
00464 bool
00465 prev_permutation(_BIter, _BIter);
00466
00467 template<typename _BIter, typename _Compare>
00468 bool
00469 prev_permutation(_BIter, _BIter, _Compare);
00470
00471 template<typename _RAIter>
00472 void
00473 push_heap(_RAIter, _RAIter);
00474
00475 template<typename _RAIter, typename _Compare>
00476 void
00477 push_heap(_RAIter, _RAIter, _Compare);
00478
00479
00480
00481 template<typename _FIter, typename _Tp>
00482 _FIter
00483 remove(_FIter, _FIter, const _Tp&);
00484
00485 template<typename _FIter, typename _Predicate>
00486 _FIter
00487 remove_if(_FIter, _FIter, _Predicate);
00488
00489 template<typename _IIter, typename _OIter, typename _Tp>
00490 _OIter
00491 remove_copy(_IIter, _IIter, _OIter, const _Tp&);
00492
00493 template<typename _IIter, typename _OIter, typename _Predicate>
00494 _OIter
00495 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
00496
00497
00498
00499 template<typename _IIter, typename _OIter, typename _Tp>
00500 _OIter
00501 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
00502
00503 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
00504 _OIter
00505 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
00506
00507
00508
00509 template<typename _BIter>
00510 void
00511 reverse(_BIter, _BIter);
00512
00513 template<typename _BIter, typename _OIter>
00514 _OIter
00515 reverse_copy(_BIter, _BIter, _OIter);
00516
00517 template<typename _FIter>
00518 void
00519 rotate(_FIter, _FIter, _FIter);
00520
00521 template<typename _FIter, typename _OIter>
00522 _OIter
00523 rotate_copy(_FIter, _FIter, _FIter, _OIter);
00524
00525
00526
00527
00528
00529
00530
00531
00532 #if defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
00533 template<typename _RAIter, typename _UGenerator>
00534 void
00535 shuffle(_RAIter, _RAIter, _UGenerator&&);
00536 #endif
00537
00538 template<typename _RAIter>
00539 void
00540 sort_heap(_RAIter, _RAIter);
00541
00542 template<typename _RAIter, typename _Compare>
00543 void
00544 sort_heap(_RAIter, _RAIter, _Compare);
00545
00546 template<typename _BIter, typename _Predicate>
00547 _BIter
00548 stable_partition(_BIter, _BIter, _Predicate);
00549
00550 template<typename _Tp>
00551 void
00552 swap(_Tp&, _Tp&);
00553
00554 template<typename _Tp, size_t _Nm>
00555 void
00556 swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
00557
00558 template<typename _FIter1, typename _FIter2>
00559 _FIter2
00560 swap_ranges(_FIter1, _FIter1, _FIter2);
00561
00562
00563
00564 template<typename _FIter>
00565 _FIter
00566 unique(_FIter, _FIter);
00567
00568 template<typename _FIter, typename _BinaryPredicate>
00569 _FIter
00570 unique(_FIter, _FIter, _BinaryPredicate);
00571
00572
00573
00574 template<typename _FIter, typename _Tp>
00575 _FIter
00576 upper_bound(_FIter, _FIter, const _Tp&);
00577
00578 template<typename _FIter, typename _Tp, typename _Compare>
00579 _FIter
00580 upper_bound(_FIter, _FIter, const _Tp&, _Compare);
00581
00582 _GLIBCXX_END_NAMESPACE_VERSION
00583
00584 _GLIBCXX_BEGIN_NAMESPACE_ALGO
00585
00586 template<typename _FIter>
00587 _FIter
00588 adjacent_find(_FIter, _FIter);
00589
00590 template<typename _FIter, typename _BinaryPredicate>
00591 _FIter
00592 adjacent_find(_FIter, _FIter, _BinaryPredicate);
00593
00594 template<typename _IIter, typename _Tp>
00595 typename iterator_traits<_IIter>::difference_type
00596 count(_IIter, _IIter, const _Tp&);
00597
00598 template<typename _IIter, typename _Predicate>
00599 typename iterator_traits<_IIter>::difference_type
00600 count_if(_IIter, _IIter, _Predicate);
00601
00602 template<typename _IIter1, typename _IIter2>
00603 bool
00604 equal(_IIter1, _IIter1, _IIter2);
00605
00606 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
00607 bool
00608 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
00609
00610 template<typename _IIter, typename _Tp>
00611 _IIter
00612 find(_IIter, _IIter, const _Tp&);
00613
00614 template<typename _FIter1, typename _FIter2>
00615 _FIter1
00616 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
00617
00618 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
00619 _FIter1
00620 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
00621
00622 template<typename _IIter, typename _Predicate>
00623 _IIter
00624 find_if(_IIter, _IIter, _Predicate);
00625
00626 template<typename _IIter, typename _Funct>
00627 _Funct
00628 for_each(_IIter, _IIter, _Funct);
00629
00630 template<typename _FIter, typename _Generator>
00631 void
00632 generate(_FIter, _FIter, _Generator);
00633
00634 template<typename _OIter, typename _Size, typename _Generator>
00635 _OIter
00636 generate_n(_OIter, _Size, _Generator);
00637
00638 template<typename _IIter1, typename _IIter2>
00639 bool
00640 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
00641
00642 template<typename _IIter1, typename _IIter2, typename _Compare>
00643 bool
00644 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
00645
00646 template<typename _FIter>
00647 _FIter
00648 max_element(_FIter, _FIter);
00649
00650 template<typename _FIter, typename _Compare>
00651 _FIter
00652 max_element(_FIter, _FIter, _Compare);
00653
00654 template<typename _IIter1, typename _IIter2, typename _OIter>
00655 _OIter
00656 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
00657
00658 template<typename _IIter1, typename _IIter2, typename _OIter,
00659 typename _Compare>
00660 _OIter
00661 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
00662
00663 template<typename _FIter>
00664 _FIter
00665 min_element(_FIter, _FIter);
00666
00667 template<typename _FIter, typename _Compare>
00668 _FIter
00669 min_element(_FIter, _FIter, _Compare);
00670
00671 template<typename _IIter1, typename _IIter2>
00672 pair<_IIter1, _IIter2>
00673 mismatch(_IIter1, _IIter1, _IIter2);
00674
00675 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
00676 pair<_IIter1, _IIter2>
00677 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
00678
00679 template<typename _RAIter>
00680 void
00681 nth_element(_RAIter, _RAIter, _RAIter);
00682
00683 template<typename _RAIter, typename _Compare>
00684 void
00685 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
00686
00687 template<typename _RAIter>
00688 void
00689 partial_sort(_RAIter, _RAIter, _RAIter);
00690
00691 template<typename _RAIter, typename _Compare>
00692 void
00693 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
00694
00695 template<typename _BIter, typename _Predicate>
00696 _BIter
00697 partition(_BIter, _BIter, _Predicate);
00698
00699 template<typename _RAIter>
00700 void
00701 random_shuffle(_RAIter, _RAIter);
00702
00703 template<typename _RAIter, typename _Generator>
00704 void
00705 random_shuffle(_RAIter, _RAIter,
00706 #ifdef __GXX_EXPERIMENTAL_CXX0X__
00707 _Generator&&);
00708 #else
00709 _Generator&);
00710 #endif
00711
00712 template<typename _FIter, typename _Tp>
00713 void
00714 replace(_FIter, _FIter, const _Tp&, const _Tp&);
00715
00716 template<typename _FIter, typename _Predicate, typename _Tp>
00717 void
00718 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
00719
00720 template<typename _FIter1, typename _FIter2>
00721 _FIter1
00722 search(_FIter1, _FIter1, _FIter2, _FIter2);
00723
00724 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
00725 _FIter1
00726 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
00727
00728 template<typename _FIter, typename _Size, typename _Tp>
00729 _FIter
00730 search_n(_FIter, _FIter, _Size, const _Tp&);
00731
00732 template<typename _FIter, typename _Size, typename _Tp,
00733 typename _BinaryPredicate>
00734 _FIter
00735 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
00736
00737 template<typename _IIter1, typename _IIter2, typename _OIter>
00738 _OIter
00739 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
00740
00741 template<typename _IIter1, typename _IIter2, typename _OIter,
00742 typename _Compare>
00743 _OIter
00744 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
00745
00746 template<typename _IIter1, typename _IIter2, typename _OIter>
00747 _OIter
00748 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
00749
00750 template<typename _IIter1, typename _IIter2, typename _OIter,
00751 typename _Compare>
00752 _OIter
00753 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
00754
00755 template<typename _IIter1, typename _IIter2, typename _OIter>
00756 _OIter
00757 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
00758
00759 template<typename _IIter1, typename _IIter2, typename _OIter,
00760 typename _Compare>
00761 _OIter
00762 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
00763 _OIter, _Compare);
00764
00765 template<typename _IIter1, typename _IIter2, typename _OIter>
00766 _OIter
00767 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
00768
00769 template<typename _IIter1, typename _IIter2, typename _OIter,
00770 typename _Compare>
00771 _OIter
00772 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
00773
00774 template<typename _RAIter>
00775 void
00776 sort(_RAIter, _RAIter);
00777
00778 template<typename _RAIter, typename _Compare>
00779 void
00780 sort(_RAIter, _RAIter, _Compare);
00781
00782 template<typename _RAIter>
00783 void
00784 stable_sort(_RAIter, _RAIter);
00785
00786 template<typename _RAIter, typename _Compare>
00787 void
00788 stable_sort(_RAIter, _RAIter, _Compare);
00789
00790 template<typename _IIter, typename _OIter, typename _UnaryOperation>
00791 _OIter
00792 transform(_IIter, _IIter, _OIter, _UnaryOperation);
00793
00794 template<typename _IIter1, typename _IIter2, typename _OIter,
00795 typename _BinaryOperation>
00796 _OIter
00797 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
00798
00799 template<typename _IIter, typename _OIter>
00800 _OIter
00801 unique_copy(_IIter, _IIter, _OIter);
00802
00803 template<typename _IIter, typename _OIter, typename _BinaryPredicate>
00804 _OIter
00805 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
00806
00807 _GLIBCXX_END_NAMESPACE_ALGO
00808 }
00809
00810 #ifdef _GLIBCXX_PARALLEL
00811 # include <parallel/algorithmfwd.h>
00812 #endif
00813
00814 #endif
00815