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

📄 stl_algobase.h

📁 linux下编程用 编译软件
💻 H
📖 第 1 页 / 共 3 页
字号:
    {      template<typename _OutputIterator, typename _Size, typename _Tp>        static _OutputIterator        fill_n(_OutputIterator __first, _Size __n, const _Tp& __value)        {	  const _Tp __tmp = __value;	  for (; __n > 0; --__n, ++__first)	    *__first = __tmp;	  return __first;	  	}    };  /**   *  @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>)      const bool __scalar = __is_scalar<_Tp>::__value;      return std::__fill_n<__scalar>::fill_n(__first, __n, __value);    }  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 + -