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

📄 stl_algobase.h

📁 openRisc2000编译链接器等,用于i386 cygwin
💻 H
📖 第 1 页 / 共 2 页
字号:
  template<typename _BI1, typename _BI2>    inline _BI2    __copy_backward_aux(_BI1 __first, _BI1 __last, _BI2 __result)    {      typedef typename __type_traits<typename iterator_traits<_BI2>::value_type>			    ::has_trivial_assignment_operator _Trivial;      return	std::__copy_backward_dispatch<_BI1, _BI2, _Trivial>::copy(__first,								  __last,								  __result);    }  template <typename _BI1, typename _BI2>    inline _BI2    __copy_backward_output_normal_iterator(_BI1 __first, _BI1 __last,					   _BI2 __result, __true_type)    { return _BI2(std::__copy_backward_aux(__first, __last, __result.base())); }  template <typename _BI1, typename _BI2>    inline _BI2    __copy_backward_output_normal_iterator(_BI1 __first, _BI1 __last,					   _BI2 __result, __false_type)    { return std::__copy_backward_aux(__first, __last, __result); }  template <typename _BI1, typename _BI2>    inline _BI2    __copy_backward_input_normal_iterator(_BI1 __first, _BI1 __last,					  _BI2 __result, __true_type)    {      typedef typename _Is_normal_iterator<_BI2>::_Normal __Normal;      return std::__copy_backward_output_normal_iterator(__first.base(),							 __last.base(),							 __result, __Normal());    }  template <typename _BI1, typename _BI2>    inline _BI2    __copy_backward_input_normal_iterator(_BI1 __first, _BI1 __last,					  _BI2 __result, __false_type)    {      typedef typename _Is_normal_iterator<_BI2>::_Normal __Normal;      return std::__copy_backward_output_normal_iterator(__first, __last,							 __result, __Normal());    }  /**   *  @brief Copies the range [first,last) into result.   *  @param  first  A bidirectional iterator.   *  @param  last   A bidirectional iterator.   *  @param  result A bidirectional iterator.   *  @return   result - (first - last)   *   *  The function has the same effect as copy, but starts at the end of the   *  range and works its way to the start, returning the start of the result.   *  This inline function will boil down to a call to @c memmove whenever   *  possible.  Failing that, if random access iterators are passed, then the   *  loop count will be known (and therefore a candidate for compiler   *  optimizations such as unrolling).   *   *  Result may not be in the range [first,last).  Use copy instead.  Note   *  that the start of the output range may overlap [first,last).  */  template <typename _BI1, typename _BI2>    inline _BI2    copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)    {      // concept requirements      __glibcxx_function_requires(_BidirectionalIteratorConcept<_BI1>)      __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<_BI2>)      __glibcxx_function_requires(_ConvertibleConcept<	    typename iterator_traits<_BI1>::value_type,	    typename iterator_traits<_BI2>::value_type>)      __glibcxx_requires_valid_range(__first, __last);      typedef typename _Is_normal_iterator<_BI1>::_Normal __Normal;      return std::__copy_backward_input_normal_iterator(__first, __last,							__result, __Normal());    }  /**   *  @brief Fills the range [first,last) with copies of value.   *  @param  first  A forward iterator.   *  @param  last   A forward iterator.   *  @param  value  A reference-to-const of arbitrary type.   *  @return   Nothing.   *   *  This function fills a range with copies of the same value.  For one-byte   *  types filling contiguous areas of memory, this becomes an inline call to   *  @c memset.  */  template<typename _ForwardIterator, typename _Tp>    void    fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value)    {      // concept requirements      __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<				  _ForwardIterator>)      __glibcxx_requires_valid_range(__first, __last);      for ( ; __first != __last; ++__first)	*__first = __value;    }  /**   *  @brief Fills the range [first,first+n) with copies of value.   *  @param  first  An output iterator.   *  @param  n      The count of copies to perform.   *  @param  value  A reference-to-const of arbitrary type.   *  @return   The iterator at first+n.   *   *  This function fills a range with copies of the same value.  For one-byte   *  types filling contiguous areas of memory, this becomes an inline call to   *  @c memset.  */  template<typename _OutputIterator, typename _Size, typename _Tp>    _OutputIterator    fill_n(_OutputIterator __first, _Size __n, const _Tp& __value)    {      // concept requirements      __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,_Tp>)      for ( ; __n > 0; --__n, ++__first)	*__first = __value;      return __first;    }  // Specialization: for one-byte types we can use memset.  inline void  fill(unsigned char* __first, unsigned char* __last, const unsigned char& __c)  {    __glibcxx_requires_valid_range(__first, __last);    const unsigned char __tmp = __c;    std::memset(__first, __tmp, __last - __first);  }  inline void  fill(signed char* __first, signed char* __last, const signed char& __c)  {    __glibcxx_requires_valid_range(__first, __last);    const signed char __tmp = __c;    std::memset(__first, static_cast<unsigned char>(__tmp), __last - __first);  }  inline void  fill(char* __first, char* __last, const char& __c)  {    __glibcxx_requires_valid_range(__first, __last);    const char __tmp = __c;    std::memset(__first, static_cast<unsigned char>(__tmp), __last - __first);  }  template<typename _Size>    inline unsigned char*    fill_n(unsigned char* __first, _Size __n, const unsigned char& __c)    {      std::fill(__first, __first + __n, __c);      return __first + __n;    }  template<typename _Size>    inline signed char*    fill_n(char* __first, _Size __n, const signed char& __c)    {      std::fill(__first, __first + __n, __c);      return __first + __n;    }  template<typename _Size>    inline char*    fill_n(char* __first, _Size __n, const char& __c)    {      std::fill(__first, __first + __n, __c);      return __first + __n;    }  /**   *  @brief Finds the places in ranges which don't match.   *  @param  first1  An input iterator.   *  @param  last1   An input iterator.   *  @param  first2  An input iterator.   *  @return   A pair of iterators pointing to the first mismatch.   *   *  This compares the elements of two ranges using @c == and returns a pair   *  of iterators.  The first iterator points into the first range, the   *  second iterator points into the second range, and the elements pointed   *  to by the iterators are not equal.  */  template<typename _InputIterator1, typename _InputIterator2>    pair<_InputIterator1, _InputIterator2>    mismatch(_InputIterator1 __first1, _InputIterator1 __last1,	     _InputIterator2 __first2)    {      // concept requirements      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)      __glibcxx_function_requires(_EqualOpConcept<	    typename iterator_traits<_InputIterator1>::value_type,	    typename iterator_traits<_InputIterator2>::value_type>)      __glibcxx_requires_valid_range(__first1, __last1);      while (__first1 != __last1 && *__first1 == *__first2)        {	  ++__first1;	  ++__first2;        }      return pair<_InputIterator1, _InputIterator2>(__first1, __first2);    }  /**   *  @brief Finds the places in ranges which don't match.   *  @param  first1  An input iterator.   *  @param  last1   An input iterator.   *  @param  first2  An input iterator.   *  @param  binary_pred  A binary predicate @link s20_3_1_base functor@endlink.   *  @return   A pair of iterators pointing to the first mismatch.   *   *  This compares the elements of two ranges using the binary_pred   *  parameter, and returns a pair   *  of iterators.  The first iterator points into the first range, the   *  second iterator points into the second range, and the elements pointed   *  to by the iterators are not equal.  */  template<typename _InputIterator1, typename _InputIterator2,	   typename _BinaryPredicate>    pair<_InputIterator1, _InputIterator2>    mismatch(_InputIterator1 __first1, _InputIterator1 __last1,	     _InputIterator2 __first2, _BinaryPredicate __binary_pred)    {      // concept requirements      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)      __glibcxx_requires_valid_range(__first1, __last1);      while (__first1 != __last1 && __binary_pred(*__first1, *__first2))        {	  ++__first1;	  ++__first2;        }      return pair<_InputIterator1, _InputIterator2>(__first1, __first2);    }  /**   *  @brief Tests a range for element-wise equality.   *  @param  first1  An input iterator.   *  @param  last1   An input iterator.   *  @param  first2  An input iterator.   *  @return   A boolean true or false.   *   *  This compares the elements of two ranges using @c == and returns true or   *  false depending on whether all of the corresponding elements of the   *  ranges are equal.  */  template<typename _InputIterator1, typename _InputIterator2>    inline bool    equal(_InputIterator1 __first1, _InputIterator1 __last1,	  _InputIterator2 __first2)    {      // concept requirements      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)      __glibcxx_function_requires(_EqualOpConcept<	    typename iterator_traits<_InputIterator1>::value_type,	    typename iterator_traits<_InputIterator2>::value_type>)      __glibcxx_requires_valid_range(__first1, __last1);      for ( ; __first1 != __last1; ++__first1, ++__first2)	if (!(*__first1 == *__first2))	  return false;      return true;    }  /**   *  @brief Tests a range for element-wise equality.   *  @param  first1  An input iterator.   *  @param  last1   An input iterator.   *  @param  first2  An input iterator.   *  @param  binary_pred  A binary predicate @link s20_3_1_base functor@endlink.   *  @return   A boolean true or false.   *   *  This compares the elements of two ranges using the binary_pred   *  parameter, and returns true or   *  false depending on whether all of the corresponding elements of the   *  ranges are equal.  */  template<typename _InputIterator1, typename _InputIterator2,	   typename _BinaryPredicate>    inline bool    equal(_InputIterator1 __first1, _InputIterator1 __last1,	  _InputIterator2 __first2,	  _BinaryPredicate __binary_pred)    {      // concept requirements      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)      __glibcxx_requires_valid_range(__first1, __last1);      for ( ; __first1 != __last1; ++__first1, ++__first2)	if (!__binary_pred(*__first1, *__first2))	  return false;      return true;    }  /**   *  @brief Performs "dictionary" comparison on ranges.   *  @param  first1  An input iterator.   *  @param  last1   An input iterator.   *  @param  first2  An input iterator.   *  @param  last2   An input iterator.   *  @return   A boolean true or false.   *   *  "Returns true if the sequence of elements defined by the range   *  [first1,last1) is lexicographically less than the sequence of elements   *  defined by the range [first2,last2).  Returns false otherwise."   *  (Quoted from [25.3.8]/1.)  If the iterators are all character pointers,   *  then this is an inline call to @c memcmp.  */  template<typename _InputIterator1, typename _InputIterator2>    bool    lexicographical_compare(_InputIterator1 __first1, _InputIterator1 __last1,			    _InputIterator2 __first2, _InputIterator2 __last2)    {      // concept requirements      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)      __glibcxx_function_requires(_LessThanOpConcept<	    typename iterator_traits<_InputIterator1>::value_type,	    typename iterator_traits<_InputIterator2>::value_type>)      __glibcxx_function_requires(_LessThanOpConcept<	    typename iterator_traits<_InputIterator2>::value_type,	    typename iterator_traits<_InputIterator1>::value_type>)      __glibcxx_requires_valid_range(__first1, __last1);      __glibcxx_requires_valid_range(__first2, __last2);      for (;__first1 != __last1 && __first2 != __last2; ++__first1, ++__first2)	{	  if (*__first1 < *__first2)	    return true;	  if (*__first2 < *__first1)	    return false;	}      return __first1 == __last1 && __first2 != __last2;    }  /**   *  @brief Performs "dictionary" comparison on ranges.   *  @param  first1  An input iterator.   *  @param  last1   An input iterator.   *  @param  first2  An input iterator.   *  @param  last2   An input iterator.   *  @param  comp  A @link s20_3_3_comparisons comparison functor@endlink.   *  @return   A boolean true or false.   *   *  The same as the four-parameter @c lexigraphical_compare, but uses the   *  comp parameter instead of @c <.  */  template<typename _InputIterator1, typename _InputIterator2,	   typename _Compare>    bool    lexicographical_compare(_InputIterator1 __first1, _InputIterator1 __last1,			    _InputIterator2 __first2, _InputIterator2 __last2,			    _Compare __comp)    {      // concept requirements      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)      __glibcxx_requires_valid_range(__first1, __last1);      __glibcxx_requires_valid_range(__first2, __last2);      for ( ; __first1 != __last1 && __first2 != __last2	    ; ++__first1, ++__first2)	{	  if (__comp(*__first1, *__first2))	    return true;	  if (__comp(*__first2, *__first1))	    return false;	}      return __first1 == __last1 && __first2 != __last2;    }  inline bool  lexicographical_compare(const unsigned char* __first1,			  const unsigned char* __last1,			  const unsigned char* __first2,			  const unsigned char* __last2)  {    __glibcxx_requires_valid_range(__first1, __last1);    __glibcxx_requires_valid_range(__first2, __last2);    const size_t __len1 = __last1 - __first1;    const size_t __len2 = __last2 - __first2;    const int __result = std::memcmp(__first1, __first2,				     std::min(__len1, __len2));    return __result != 0 ? __result < 0 : __len1 < __len2;  }  inline bool  lexicographical_compare(const char* __first1, const char* __last1,			  const char* __first2, const char* __last2)  {    __glibcxx_requires_valid_range(__first1, __last1);    __glibcxx_requires_valid_range(__first2, __last2);#if CHAR_MAX == SCHAR_MAX    return std::lexicographical_compare((const signed char*) __first1,					(const signed char*) __last1,					(const signed char*) __first2,					(const signed char*) __last2);#else /* CHAR_MAX == SCHAR_MAX */    return std::lexicographical_compare((const unsigned char*) __first1,					(const unsigned char*) __last1,					(const unsigned char*) __first2,					(const unsigned char*) __last2);#endif /* CHAR_MAX == SCHAR_MAX */  }} // namespace std#endif

⌨️ 快捷键说明

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