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