?? algorithm
字號:
_OutputIter, _Compare);
template <class _InputIter1, class _InputIter2, class _OutputIter>
inline _OutputIter
set_intersection (_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2, _OutputIter __res)
{
return _STD::set_intersection (__first1, __last1, __first2, __last2,
__res, _RWSTD_LESS (_InputIter1));
}
// 25.3.5.4
template <class _InputIter1, class _InputIter2, class _OutputIter,
class _Compare>
_OutputIter
set_difference (_InputIter1, _InputIter1, _InputIter2, _InputIter2,
_OutputIter, _Compare);
template <class _InputIter1, class _InputIter2, class _OutputIter>
inline _OutputIter
set_difference (_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2, _OutputIter __res)
{
return _STD::set_difference (__first1, __last1, __first2, __last2,
__res, _RWSTD_LESS (_InputIter1));
}
// 25.3.5.5
template <class _InputIter1, class _InputIter2, class _OutputIter,
class _Compare>
_OutputIter
set_symmetric_difference (_InputIter1, _InputIter1, _InputIter2, _InputIter2,
_OutputIter, _Compare);
template <class _InputIter1, class _InputIter2, class _OutputIter>
inline _OutputIter
set_symmetric_difference (_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _InputIter2 __last2,
_OutputIter __res)
{
return _STD::set_symmetric_difference (__first1, __last1,
__first2, __last2,
__res, _RWSTD_LESS (_InputIter1));
}
// 25.3.6 - Heap operations
// helper to work around the lack of iterator_traits
template <class _RandomAccessIter, class _Distance, class _TypeT,
class _Compare>
void __push_heap (_RandomAccessIter, _Distance, _Distance, _TypeT, _Compare);
template <class _RandomAccessIter, class _Distance, class _Compare>
inline void
__push_heap (_RandomAccessIter __first, _RandomAccessIter __last,
_Distance*, _Compare __comp)
{
__push_heap (__first, _Distance (__last - __first),
_Distance (), *__last, __comp);
}
// 25.3.6.1
template <class _RandomAccessIter, class _Compare>
inline void push_heap (_RandomAccessIter __first, _RandomAccessIter __last,
_Compare __comp)
{
_RWSTD_ASSERT_RANGE (__first, __last);
if (!(__first == __last))
__push_heap (__first, --__last,
_RWSTD_DIFFERENCE_TYPE (_RandomAccessIter), __comp);
}
// 25.3.6.1
template <class _RandomAccessIter>
inline void push_heap (_RandomAccessIter __first, _RandomAccessIter __last)
{
_STD::push_heap (__first, __last, _RWSTD_LESS (_RandomAccessIter));
}
template <class _RandomAccessIter, class _Distance, class _TypeT,
class _Compare>
void __adjust_heap (_RandomAccessIter, _Distance, _Distance, _TypeT, _Compare);
// helper to work around the lack of iterator_traits
template <class _RandomAccessIter, class _TypeT, class _Compare,
class _Distance>
inline void
__pop_heap (_RandomAccessIter __first, _RandomAccessIter __last,
_RandomAccessIter __res, _TypeT __val, _Compare __cmp, _Distance*)
{
*__res = *__first;
__adjust_heap (__first, _Distance (),
_Distance (__last - __first), __val, __cmp);
}
// 25.3.6.2
template <class _RandomAccessIter, class _Compare>
inline void
pop_heap (_RandomAccessIter __first, _RandomAccessIter __last, _Compare __comp)
{
_RWSTD_ASSERT_RANGE (__first, __last);
if (!(__first == __last)) {
--__last;
__pop_heap (__first, __last, __last, *__last, __comp,
_RWSTD_DIFFERENCE_TYPE (_RandomAccessIter));
}
}
// 25.3.6.2
template <class _RandomAccessIter>
inline void pop_heap (_RandomAccessIter __first, _RandomAccessIter __last)
{
_STD::pop_heap (__first, __last, _RWSTD_LESS (_RandomAccessIter));
}
template <class _RandomAccessIter, class _Compare, class _TypeT,
class _Distance>
void __make_heap (_RandomAccessIter, _RandomAccessIter,
_Compare, _TypeT*, _Distance*);
// 25.3.6.3
template <class _RandomAccessIter, class _Compare>
inline void make_heap (_RandomAccessIter __first, _RandomAccessIter __last,
_Compare __comp)
{
_RWSTD_ASSERT_RANGE (__first, __last);
if (!(__last - __first < 2))
__make_heap (__first, __last, __comp,
_RWSTD_VALUE_TYPE (_RandomAccessIter),
_RWSTD_DIFFERENCE_TYPE (_RandomAccessIter));
}
// 25.3.6.3
template <class _RandomAccessIter>
inline void make_heap (_RandomAccessIter __first, _RandomAccessIter __last)
{
_STD::make_heap (__first, __last, _RWSTD_LESS (_RandomAccessIter));
}
// 25.3.6.4
template <class _RandomAccessIter, class _Compare>
inline void sort_heap (_RandomAccessIter __first, _RandomAccessIter __last,
_Compare __comp)
{
_RWSTD_ASSERT_RANGE (__first, __last);
for (; __last - __first > 1; --__last)
_STD::pop_heap (__first, __last, __comp);
}
// 25.3.6.4
template <class _RandomAccessIter>
inline void sort_heap (_RandomAccessIter __first, _RandomAccessIter __last)
{
_STD::sort_heap (__first, __last, _RWSTD_LESS (_RandomAccessIter));
}
// 25.3.7 - Minimum and maximum
// 25.3.7, p7
template <class _FwdIter, class _Compare>
_FwdIter min_element (_FwdIter, _FwdIter, _Compare);
template <class _FwdIter>
inline _FwdIter min_element (_FwdIter __first, _FwdIter __last)
{
return _STD::min_element (__first, __last, _RWSTD_LESS (_FwdIter));
}
// 25.3.7, p9
template <class _FwdIter, class _Compare>
_FwdIter max_element (_FwdIter, _FwdIter, _Compare);
template <class _FwdIter>
inline _FwdIter max_element (_FwdIter __first, _FwdIter __last)
{
return _STD::max_element (__first, __last, _RWSTD_LESS (_FwdIter));
}
// 25.3.9 - Permutation generators [lib.alg.permutation.generators]
// 25.3.9, p1
template <class _BidirIter, class _Compare>
bool next_permutation (_BidirIter, _BidirIter, _Compare);
template <class _BidirIter>
inline bool next_permutation (_BidirIter __first, _BidirIter __last)
{
return _STD::next_permutation (__first, __last, _RWSTD_LESS (_BidirIter));
}
// 25.3.9, p3
template <class _BidirIter, class _Compare>
bool prev_permutation (_BidirIter, _BidirIter, _Compare);
template <class _BidirIter>
inline bool prev_permutation (_BidirIter __first, _BidirIter __last)
{
return _STD::prev_permutation (__first, __last, _RWSTD_LESS (_BidirIter));
}
//
// Modifying sequence operations.
//
template <class _FwdIter1, class _FwdIter2>
inline _FwdIter2
swap_ranges (_FwdIter1 __first1, _FwdIter1 __last1, _FwdIter2 __first2)
{
_RWSTD_ASSERT_RANGE (__first1, __last1);
for (; __first1 != __last1; ++__first1, ++__first2)
_STD::iter_swap (__first1, __first2);
return __first2;
}
template <class _InputIter, class _OutputIter, class _UnaryOperation>
inline _OutputIter
transform (_InputIter __first, _InputIter __last, _OutputIter __res,
_UnaryOperation __unary_op)
{
_RWSTD_ASSERT_RANGE (__first, __last);
for (; __first != __last; ++__res, ++__first)
*__res = __unary_op (*__first);
return __res;
}
template <class _InputIter1, class _InputIter2,
class _OutputIter, class _BinaryOperation>
inline _OutputIter
transform (_InputIter1 __first1, _InputIter1 __last1,
_InputIter2 __first2, _OutputIter __res,
_BinaryOperation __binary_op)
{
_RWSTD_ASSERT_RANGE (__first1, __last1);
for (; __first1 != __last1; ++__res, ++__first1, ++__first2)
*__res = __binary_op (*__first1, *__first2);
return __res;
}
template <class _FwdIter, class _TypeT>
inline void replace (_FwdIter __first, _FwdIter __last,
const _TypeT& __old_value, const _TypeT& __new_value)
{
_RWSTD_ASSERT_RANGE (__first, __last);
for (; __first != __last; ++__first)
if (*__first == __old_value)
*__first = __new_value;
}
template <class _FwdIter, class _Predicate, class _TypeT>
inline void replace_if (_FwdIter __first, _FwdIter __last,
_Predicate __pred, const _TypeT& __new_value)
{
_RWSTD_ASSERT_RANGE (__first, __last);
for (; __first != __last; ++__first)
if (__pred(*__first))
*__first = __new_value;
}
template <class _InputIter, class _OutputIter, class _TypeT>
inline _OutputIter
replace_copy (_InputIter __first, _InputIter __last, _OutputIter __res,
const _TypeT& __old_value, const _TypeT& __new_value)
{
_RWSTD_ASSERT_RANGE (__first, __last);
for (;__first != __last; ++__first, ++__res)
*__res = *__first == __old_value ? __new_value : *__first;
return __res;
}
template <class _FwdIter, class _Generator>
inline void generate (_FwdIter __first, _FwdIter __last, _Generator __gen)
{
_RWSTD_ASSERT_RANGE (__first, __last);
for (; __first != __last; ++__first)
*__first = __gen ();
}
template <class _OutputIter, class _Size, class _Generator>
inline void generate_n (_OutputIter __first, _Size __n, _Generator __gen)
{
for (; __n > 0;--__n, ++__first)
*__first = __gen ();
}
template <class _BidirIter>
inline void __reverse (_BidirIter __first, _BidirIter __last,
bidirectional_iterator_tag)
{
// Complexity: exactly (last - first) / 2 calls to std::iter_swap<>()
for (; __first != __last && __first != --__last; ++__first)
_STD::iter_swap (__first, __last);
}
template <class _RandomAccessIter>
inline void __reverse (_RandomAccessIter __first, _RandomAccessIter __last,
random_access_iterator_tag)
{
// Complexity: exactly (last - first) / 2 calls to std::iter_swap<>()
if (__first != __last)
for (; __first < --__last; ++__first)
_STD::iter_swap (__first, __last);
}
template <class _BidirIter, class _OutputIter>
inline _OutputIter
reverse_copy (_BidirIter __first, _BidirIter __last, _OutputIter __res)
{
_RWSTD_ASSERT_RANGE (__first, __last);
for (; __first != __last; ++__res)
*__res = *--__last;
return __res;
}
_RWSTD_NAMESPACE_END // std
#undef _INLINE
#ifdef _RWSTD_COMPILE_INSTANTIATE
# include <algorithm.cc>
#endif
#endif // _RWSTD_ALGORITHM_INCLUDED
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -