📄 _algobase.h
字号:
}template <class _RAIter, class _Size, class _OutputIter>inline pair<_RAIter, _OutputIter>__copy_n(_RAIter __first, _Size __count, _OutputIter __result, const random_access_iterator_tag &) { _RAIter __last = __first + __count; return pair<_RAIter, _OutputIter>(__last, copy(__first, __last, __result));}template <class _InputIter, class _Size, class _OutputIter>inline pair<_InputIter, _OutputIter>__copy_n(_InputIter __first, _Size __count, _OutputIter __result) { _STLP_FIX_LITERAL_BUG(__first) return __copy_n(__first, __count, __result, _STLP_ITERATOR_CATEGORY(__first, _InputIter));}template <class _InputIter, class _Size, class _OutputIter>inline pair<_InputIter, _OutputIter>copy_n(_InputIter __first, _Size __count, _OutputIter __result) { _STLP_FIX_LITERAL_BUG(__first) return __copy_n(__first, __count, __result, _STLP_ITERATOR_CATEGORY(__first, _InputIter));}//--------------------------------------------------// fill and fill_ntemplate <class _ForwardIter, class _Tp>_STLP_INLINE_LOOPvoid fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) { _STLP_DEBUG_CHECK(__check_range(__first, __last)) for ( ; __first != __last; ++__first) *__first = __val;}template <class _OutputIter, class _Size, class _Tp>_STLP_INLINE_LOOP_OutputIter fill_n(_OutputIter __first, _Size __n, const _Tp& __val) { _STLP_FIX_LITERAL_BUG(__first) for ( ; __n > 0; --__n, ++__first) *__first = __val; return __first;}// Specialization: for one-byte types we can use memset.inline void fill(unsigned char* __first, unsigned char* __last, const unsigned char& __val) { unsigned char __tmp = __val; memset(__first, __tmp, __last - __first);}# ifndef _STLP_NO_SIGNED_BUILTINSinline void fill(signed char* __first, signed char* __last, const signed char& __val) { signed char __tmp = __val; memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first);}# endifinline void fill(char* __first, char* __last, const char& __val) { char __tmp = __val; memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first);}#ifdef _STLP_FUNCTION_TMPL_PARTIAL_ORDERtemplate <class _Size>inline unsigned char* fill_n(unsigned char* __first, _Size __n, const unsigned char& __val) { fill(__first, __first + __n, __val); return __first + __n;}template <class _Size>inline signed char* fill_n(char* __first, _Size __n, const signed char& __val) { fill(__first, __first + __n, __val); return __first + __n;}template <class _Size>inline char* fill_n(char* __first, _Size __n, const char& __val) { fill(__first, __first + __n, __val); return __first + __n;}#endif /* _STLP_FUNCTION_TMPL_PARTIAL_ORDER *///--------------------------------------------------// equal and mismatchtemplate <class _InputIter1, class _InputIter2>_STLP_INLINE_LOOPpair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2) { _STLP_FIX_LITERAL_BUG(__first2) _STLP_DEBUG_CHECK(__check_range(__first1, __last1)) while (__first1 != __last1 && *__first1 == *__first2) { ++__first1; ++__first2; } return pair<_InputIter1, _InputIter2>(__first1, __first2);}template <class _InputIter1, class _InputIter2, class _BinaryPredicate>_STLP_INLINE_LOOPpair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _BinaryPredicate __binary_pred) { _STLP_FIX_LITERAL_BUG(__first2) _STLP_DEBUG_CHECK(__check_range(__first1, __last1)) while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) { ++__first1; ++__first2; } return pair<_InputIter1, _InputIter2>(__first1, __first2);}template <class _InputIter1, class _InputIter2>_STLP_INLINE_LOOPbool equal(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2) { _STLP_FIX_LITERAL_BUG(__first1) _STLP_FIX_LITERAL_BUG(__last1) _STLP_FIX_LITERAL_BUG(__first2) _STLP_DEBUG_CHECK(__check_range(__first1, __last1)) for ( ; __first1 != __last1; ++__first1, ++__first2) if (!(*__first1 == *__first2)) return false; return true;}template <class _InputIter1, class _InputIter2, class _BinaryPredicate>_STLP_INLINE_LOOPbool equal(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _BinaryPredicate __binary_pred) { _STLP_FIX_LITERAL_BUG(__first2) _STLP_DEBUG_CHECK(__check_range(__first1, __last1)) for ( ; __first1 != __last1; ++__first1, ++__first2) if (!__binary_pred(*__first1, *__first2)) return false; return true;}//--------------------------------------------------// lexicographical_compare and lexicographical_compare_3way.// (the latter is not part of the C++ standard.)template <class _InputIter1, class _InputIter2>bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2);template <class _InputIter1, class _InputIter2, class _Compare>bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _Compare __comp);inline bool lexicographical_compare(const unsigned char* __first1, const unsigned char* __last1, const unsigned char* __first2, const unsigned char* __last2){ const size_t __len1 = __last1 - __first1; const size_t __len2 = __last2 - __first2; _STLP_DEBUG_CHECK(__check_range(__first1, __last1)) _STLP_DEBUG_CHECK(__check_range(__first2, __last2)) const int __result = memcmp(__first1, __first2, (min) (__len1, __len2)); return __result != 0 ? (__result < 0) : (__len1 < __len2);}# if !(CHAR_MAX == SCHAR_MAX)inline bool lexicographical_compare(const char* __first1, const char* __last1, const char* __first2, const char* __last2){ _STLP_DEBUG_CHECK(__check_range(__first1, __last1)) _STLP_DEBUG_CHECK(__check_range(__first2, __last2)) return lexicographical_compare((const unsigned char*) __first1, (const unsigned char*) __last1, (const unsigned char*) __first2, (const unsigned char*) __last2);}#endif /* CHAR_MAX == SCHAR_MAX */template <class _InputIter1, class _InputIter2>int __lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2);inline int__lexicographical_compare_3way(const unsigned char* __first1, const unsigned char* __last1, const unsigned char* __first2, const unsigned char* __last2){ const ptrdiff_t __len1 = __last1 - __first1; const ptrdiff_t __len2 = __last2 - __first2; const int __result = memcmp(__first1, __first2, (min) (__len1, __len2)); return __result != 0 ? __result : (__len1 == __len2 ? 0 : (__len1 < __len2 ? -1 : 1));}# if !(CHAR_MAX == SCHAR_MAX)inline int __lexicographical_compare_3way(const char* __first1, const char* __last1, const char* __first2, const char* __last2){ return __lexicographical_compare_3way((const unsigned char*) __first1, (const unsigned char*) __last1, (const unsigned char*) __first2, (const unsigned char*) __last2);}# endif# ifndef _STLP_NO_EXTENSIONStemplate <class _InputIter1, class _InputIter2>int lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2);# endif /* EXTENSIONS */// counttemplate <class _InputIter, class _Tp>_STLP_INLINE_LOOP _STLP_DIFFERENCE_TYPE(_InputIter)count(_InputIter __first, _InputIter __last, const _Tp& __val) { _STLP_DEBUG_CHECK(__check_range(__first, __last)) _STLP_DIFFERENCE_TYPE(_InputIter) __n = 0; for ( ; __first != __last; ++__first) if (*__first == __val) ++__n; return __n;}// find and find_if. Note find may be expressed in terms of find_if if appropriate binder was available.template <class _InputIter, class _Tp>_InputIter find(_InputIter __first, _InputIter __last, const _Tp& __val);template <class _InputIter, class _Predicate>_InputIter find_if(_InputIter __first, _InputIter __last, _Predicate __pred);// search.template <class _ForwardIter1, class _ForwardIter2, class _BinaryPred>_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2, _ForwardIter2 __last2, _BinaryPred __predicate);// find_first_oftemplate <class _InputIter, class _ForwardIter, class _BinaryPredicate>_InputIter __find_first_of(_InputIter __first1, _InputIter __last1, _ForwardIter __first2, _ForwardIter __last2, _BinaryPredicate __comp);template <class _ForwardIter1, class _ForwardIter2, class _BinaryPredicate>_ForwardIter1 find_end(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2, _ForwardIter2 __last2, _BinaryPredicate __comp);// replacetemplate <class _ForwardIter, class _Tp>_STLP_INLINE_LOOP void replace(_ForwardIter __first, _ForwardIter __last, const _Tp& __old_value, const _Tp& __new_value) { _STLP_DEBUG_CHECK(__check_range(__first, __last)) for ( ; __first != __last; ++__first) if (*__first == __old_value) *__first = __new_value;}template <class _ForwardIter, class _Tp, class _Compare, class _Distance>_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last, const _Tp& __val, _Compare __comp, _Distance*);_STLP_END_NAMESPACE# if !defined (_STLP_LINK_TIME_INSTANTIATION)# include <stl/_algobase.c># endif#endif /* _STLP_INTERNAL_ALGOBASE_H */// Local Variables:// mode:C++// End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -