⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stl_algo.h

📁 STL 最新源代码
💻 H
📖 第 1 页 / 共 5 页
字号:
      ++__first1;    return __first1;      }  // General case.  _ForwardIter2 __p1, __p;  __p1 = __first2; ++__p1;  _ForwardIter1 __current = __first1;  while (__first1 != __last1) {    while (__first1 != __last1) {      if (__predicate(*__first1, *__first2))        break;      ++__first1;    }    while (__first1 != __last1 && !__predicate(*__first1, *__first2))      ++__first1;    if (__first1 == __last1)      return __last1;    __p = __p1;    __current = __first1;     if (++__current == __last1) return __last1;    while (__predicate(*__current, *__p)) {      if (++__p == __last2)        return __first1;      if (++__current == __last1)        return __last1;    }    ++__first1;  }  return __first1;}// search_n.  Search for __count consecutive copies of __val.template <class _ForwardIter, class _Integer, class _Tp>_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,                      _Integer __count, const _Tp& __val) {  __STL_REQUIRES(_ForwardIter, _ForwardIterator);  __STL_REQUIRES(typename iterator_traits<_ForwardIter>::value_type,                 _EqualityComparable);  __STL_REQUIRES(_Tp, _EqualityComparable);  if (__count <= 0)    return __first;  else {    __first = find(__first, __last, __val);    while (__first != __last) {      _Integer __n = __count - 1;      _ForwardIter __i = __first;      ++__i;      while (__i != __last && __n != 0 && *__i == __val) {        ++__i;        --__n;      }      if (__n == 0)        return __first;      else        __first = find(__i, __last, __val);    }    return __last;  }}template <class _ForwardIter, class _Integer, class _Tp, class _BinaryPred>_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,                      _Integer __count, const _Tp& __val,                      _BinaryPred __binary_pred) {  __STL_REQUIRES(_ForwardIter, _ForwardIterator);  __STL_BINARY_FUNCTION_CHECK(_BinaryPred, bool,              typename iterator_traits<_ForwardIter>::value_type, _Tp);  if (__count <= 0)    return __first;  else {    while (__first != __last) {      if (__binary_pred(*__first, __val))        break;      ++__first;    }    while (__first != __last) {      _Integer __n = __count - 1;      _ForwardIter __i = __first;      ++__i;      while (__i != __last && __n != 0 && __binary_pred(*__i, __val)) {        ++__i;        --__n;      }      if (__n == 0)        return __first;      else {        while (__i != __last) {          if (__binary_pred(*__i, __val))            break;          ++__i;        }        __first = __i;      }    }    return __last;  }} // swap_rangestemplate <class _ForwardIter1, class _ForwardIter2>_ForwardIter2 swap_ranges(_ForwardIter1 __first1, _ForwardIter1 __last1,                          _ForwardIter2 __first2) {  __STL_REQUIRES(_ForwardIter1, _Mutable_ForwardIterator);  __STL_REQUIRES(_ForwardIter2, _Mutable_ForwardIterator);  __STL_CONVERTIBLE(typename iterator_traits<_ForwardIter1>::value_type,                    typename iterator_traits<_ForwardIter2>::value_type);  __STL_CONVERTIBLE(typename iterator_traits<_ForwardIter2>::value_type,                    typename iterator_traits<_ForwardIter1>::value_type);  for ( ; __first1 != __last1; ++__first1, ++__first2)    iter_swap(__first1, __first2);  return __first2;}// transformtemplate <class _InputIter, class _OutputIter, class _UnaryOperation>_OutputIter transform(_InputIter __first, _InputIter __last,                      _OutputIter __result, _UnaryOperation __opr) {  __STL_REQUIRES(_InputIter, _InputIterator);  __STL_REQUIRES(_OutputIter, _OutputIterator);  for ( ; __first != __last; ++__first, ++__result)    *__result = __opr(*__first);  return __result;}template <class _InputIter1, class _InputIter2, class _OutputIter,          class _BinaryOperation>_OutputIter transform(_InputIter1 __first1, _InputIter1 __last1,                      _InputIter2 __first2, _OutputIter __result,                      _BinaryOperation __binary_op) {  __STL_REQUIRES(_InputIter1, _InputIterator);  __STL_REQUIRES(_InputIter2, _InputIterator);  __STL_REQUIRES(_OutputIter, _OutputIterator);  for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)    *__result = __binary_op(*__first1, *__first2);  return __result;}// replace, replace_if, replace_copy, replace_copy_iftemplate <class _ForwardIter, class _Tp>void replace(_ForwardIter __first, _ForwardIter __last,             const _Tp& __old_value, const _Tp& __new_value) {  __STL_REQUIRES(_ForwardIter, _Mutable_ForwardIterator);  __STL_REQUIRES_BINARY_OP(_OP_EQUAL, bool,         typename iterator_traits<_ForwardIter>::value_type, _Tp);  __STL_CONVERTIBLE(_Tp, typename iterator_traits<_ForwardIter>::value_type);  for ( ; __first != __last; ++__first)    if (*__first == __old_value)      *__first = __new_value;}template <class _ForwardIter, class _Predicate, class _Tp>void replace_if(_ForwardIter __first, _ForwardIter __last,                _Predicate __pred, const _Tp& __new_value) {  __STL_REQUIRES(_ForwardIter, _Mutable_ForwardIterator);  __STL_CONVERTIBLE(_Tp, typename iterator_traits<_ForwardIter>::value_type);  __STL_UNARY_FUNCTION_CHECK(_Predicate, bool,             typename iterator_traits<_ForwardIter>::value_type);  for ( ; __first != __last; ++__first)    if (__pred(*__first))      *__first = __new_value;}template <class _InputIter, class _OutputIter, class _Tp>_OutputIter replace_copy(_InputIter __first, _InputIter __last,                         _OutputIter __result,                         const _Tp& __old_value, const _Tp& __new_value) {  __STL_REQUIRES(_InputIter, _InputIterator);  __STL_REQUIRES(_OutputIter, _OutputIterator);  __STL_REQUIRES_BINARY_OP(_OP_EQUAL, bool,         typename iterator_traits<_InputIter>::value_type, _Tp);  for ( ; __first != __last; ++__first, ++__result)    *__result = *__first == __old_value ? __new_value : *__first;  return __result;}template <class _InputIter, class _OutputIter, class _Predicate, class _Tp>_OutputIter replace_copy_if(_InputIter __first, _InputIter __last,                            _OutputIter __result,                            _Predicate __pred, const _Tp& __new_value) {  __STL_REQUIRES(_InputIter, _InputIterator);  __STL_REQUIRES(_OutputIter, _OutputIterator);  __STL_UNARY_FUNCTION_CHECK(_Predicate, bool,                typename iterator_traits<_InputIter>::value_type);  for ( ; __first != __last; ++__first, ++__result)    *__result = __pred(*__first) ? __new_value : *__first;  return __result;}// generate and generate_ntemplate <class _ForwardIter, class _Generator>void generate(_ForwardIter __first, _ForwardIter __last, _Generator __gen) {  __STL_REQUIRES(_ForwardIter, _ForwardIterator);  __STL_GENERATOR_CHECK(_Generator,           typename iterator_traits<_ForwardIter>::value_type);  for ( ; __first != __last; ++__first)    *__first = __gen();}template <class _OutputIter, class _Size, class _Generator>_OutputIter generate_n(_OutputIter __first, _Size __n, _Generator __gen) {  __STL_REQUIRES(_OutputIter, _OutputIterator);  for ( ; __n > 0; --__n, ++__first)    *__first = __gen();  return __first;}// remove, remove_if, remove_copy, remove_copy_iftemplate <class _InputIter, class _OutputIter, class _Tp>_OutputIter remove_copy(_InputIter __first, _InputIter __last,                        _OutputIter __result, const _Tp& __value) {  __STL_REQUIRES(_InputIter, _InputIterator);  __STL_REQUIRES(_OutputIter, _OutputIterator);  __STL_REQUIRES_BINARY_OP(_OP_EQUAL, bool,       typename iterator_traits<_InputIter>::value_type, _Tp);  for ( ; __first != __last; ++__first)    if (!(*__first == __value)) {      *__result = *__first;      ++__result;    }  return __result;}template <class _InputIter, class _OutputIter, class _Predicate>_OutputIter remove_copy_if(_InputIter __first, _InputIter __last,                           _OutputIter __result, _Predicate __pred) {  __STL_REQUIRES(_InputIter, _InputIterator);  __STL_REQUIRES(_OutputIter, _OutputIterator);  __STL_UNARY_FUNCTION_CHECK(_Predicate, bool,             typename iterator_traits<_InputIter>::value_type);  for ( ; __first != __last; ++__first)    if (!__pred(*__first)) {      *__result = *__first;      ++__result;    }  return __result;}template <class _ForwardIter, class _Tp>_ForwardIter remove(_ForwardIter __first, _ForwardIter __last,                    const _Tp& __value) {  __STL_REQUIRES(_ForwardIter, _Mutable_ForwardIterator);  __STL_REQUIRES_BINARY_OP(_OP_EQUAL, bool,       typename iterator_traits<_ForwardIter>::value_type, _Tp);  __STL_CONVERTIBLE(_Tp, typename iterator_traits<_ForwardIter>::value_type);  __first = find(__first, __last, __value);  _ForwardIter __i = __first;  return __first == __last ? __first                            : remove_copy(++__i, __last, __first, __value);}template <class _ForwardIter, class _Predicate>_ForwardIter remove_if(_ForwardIter __first, _ForwardIter __last,                       _Predicate __pred) {  __STL_REQUIRES(_ForwardIter, _Mutable_ForwardIterator);  __STL_UNARY_FUNCTION_CHECK(_Predicate, bool,               typename iterator_traits<_ForwardIter>::value_type);  __first = find_if(__first, __last, __pred);  _ForwardIter __i = __first;  return __first == __last ? __first                            : remove_copy_if(++__i, __last, __first, __pred);}// unique and unique_copytemplate <class _InputIter, class _OutputIter, class _Tp>_OutputIter __unique_copy(_InputIter __first, _InputIter __last,                          _OutputIter __result, _Tp*) {  _Tp __value = *__first;  *__result = __value;  while (++__first != __last)    if (!(__value == *__first)) {      __value = *__first;      *++__result = __value;    }  return ++__result;}template <class _InputIter, class _OutputIter>inline _OutputIter __unique_copy(_InputIter __first, _InputIter __last,                                 _OutputIter __result,                                  output_iterator_tag) {  return __unique_copy(__first, __last, __result, __VALUE_TYPE(__first));}template <class _InputIter, class _ForwardIter>_ForwardIter __unique_copy(_InputIter __first, _InputIter __last,                           _ForwardIter __result, forward_iterator_tag) {  *__result = *__first;  while (++__first != __last)    if (!(*__result == *__first))      *++__result = *__first;  return ++__result;}template <class _InputIter, class _OutputIter>inline _OutputIter unique_copy(_InputIter __first, _InputIter __last,                               _OutputIter __result) {  __STL_REQUIRES(_InputIter, _InputIterator);  __STL_REQUIRES(_OutputIter, _OutputIterator);  __STL_REQUIRES(typename iterator_traits<_InputIter>::value_type,                 _EqualityComparable);  if (__first == __last) return __result;  return __unique_copy(__first, __last, __result,                       __ITERATOR_CATEGORY(__result));}template <class _InputIter, class _OutputIter, class _BinaryPredicate,          class _Tp>_OutputIter __unique_copy(_InputIter __first, _InputIter __last,                          _OutputIter __result,                          _BinaryPredicate __binary_pred, _Tp*) {  __STL_BINARY_FUNCTION_CHECK(_BinaryPredicate, bool, _Tp, _Tp);  _Tp __value = *__first;  *__result = __value;  while (++__first != __last)    if (!__binary_pred(__value, *__first)) {      __value = *__first;      *++__result = __value;    }  return ++__result;}template <class _InputIter, class _OutputIter, class _BinaryPredicate>inline _OutputIter __unique_copy(_InputIter __first, _InputIter __last,                                 _OutputIter __result,                                 _BinaryPredicate __binary_pred,                                 output_iterator_tag) {  return __unique_copy(__first, __last, __result, __binary_pred,                       __VALUE_TYPE(__first));}template <class _InputIter, class _ForwardIter, class _BinaryPredicate>_ForwardIter __unique_copy(_InputIter __first, _InputIter __last,                           _ForwardIter __result,                            _BinaryPredicate __binary_pred,                           forward_iterator_tag) {  __STL_BINARY_FUNCTION_CHECK(_BinaryPredicate, bool,     typename iterator_traits<_ForwardIter>::value_type,     typename iterator_traits<_InputIter>::value_type);  *__result = *__first;  while (++__first != __last)    if (!__binary_pred(*__result, *__first)) *++__result = *__first;  return ++__result;}template <class _InputIter, class _OutputIter, class _BinaryPredicate>inline _OutputIter unique_copy(_InputIter __first, _InputIter __last,                               _OutputIter __result,                               _BinaryPredicate __binary_pred) {  __STL_REQUIRES(_InputIter, _InputIterator);  __STL_REQUIRES(_OutputIter, _OutputIterator);  if (__first == __last) return __result;  return __unique_copy(__first, __last, __result, __binary_pred,                       __ITERATOR_CATEGORY(__result));}template <class _ForwardIter>_ForwardIter unique(_ForwardIter __first, _ForwardIter __last) {  __STL_REQUIRES(_ForwardIter, _Mutable_ForwardIterator);  __STL_REQUIRES(typename iterator_traits<_ForwardIter>::value_type,                 _EqualityComparable);  __first = adjacent_find(__first, __last);  return unique_copy(__first, __last, __first);}template <class _ForwardIter, class _BinaryPredicate>_ForwardIter unique(_ForwardIter __first, _ForwardIter __last,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -