STL源代码分析(ch2 内存分配)uninitialized_fill_n

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL源代码分析(ch2 内存分配)uninitialized_fill_n相关的知识,希望对你有一定的参考价值。

1. uninitialized_fill_n(ForwardIter first, Size n, const T& value)

从 first 位置开始,填充 n 个元素值,返回填充结束的位置

template <class ForwardIter, class Size, class T>
ForwardIter uninitialized_fill_n(ForwardIter first, Size n, const T& value)

  return mystl::unchecked_uninit_fill_n(first, n, value, 
                                        std::is_trivially_copy_assignable<
                                        typename iterator_traits<ForwardIter>::
                                        value_type>);

->

template <class ForwardIter, class Size, class T>
ForwardIter 
unchecked_uninit_fill_n(ForwardIter first, Size n, const T& value, std::true_type)

  return mystl::fill_n(first, n, value);


template <class ForwardIter, class Size, class T>
ForwardIter 
unchecked_uninit_fill_n(ForwardIter first, Size n, const T& value, std::false_type)

  auto cur = first;
  try
  
    for (; n > 0; --n, ++cur)
    
      mystl::construct(&*cur, value);
    
  
  catch (...)
  
    for (; first != cur; ++first)
      mystl::destroy(&*first);
  
  return cur;

1.1 fill_n

// 从 first 位置开始填充 n 个值
template <class OutputIter, class Size, class T>
OutputIter fill_n(OutputIter first, Size n, const T& value)

  return unchecked_fill_n(first, n, value);

->

template <class OutputIter, class Size, class T>
OutputIter unchecked_fill_n(OutputIter first, Size n, const T& value)

  for (; n > 0; --n, ++first)
  
    *first = value;
  
  return first;


// 为 one-byte 类型提供特化版本
template <class Tp, class Size, class Up>
typename std::enable_if<
  std::is_integral<Tp>::value && sizeof(Tp) == 1 &&
  !std::is_same<Tp, bool>::value &&
  std::is_integral<Up>::value && sizeof(Up) == 1,
  Tp*>::type
unchecked_fill_n(Tp* first, Size n, Up value)

  if (n > 0)
  
    std::memset(first, (unsigned char)value, (size_t)(n));
  
  return first + n;

以上是关于STL源代码分析(ch2 内存分配)uninitialized_fill_n的主要内容,如果未能解决你的问题,请参考以下文章

STL源代码分析(ch2 内存分配)概述

STL源代码分析(ch2 内存分配)uninitialized_fill

STL源代码分析(ch2 内存分配)jjalloc.h

STL源代码分析(ch2 内存分配)uninitialized_fill

STL源代码分析(ch2 内存分配)uninitialized_fill_n

STL源码分析--vector