function template
<memory>

std::uninitialized_fill

template <class ForwardIterator, class T>  void uninitialized_fill (ForwardIterator first, ForwardIterator last,                           const T& x);
Fill block of memory
Constructs all the elements in the range [first,last) initializing them to a value of x.

Unlike algorithm fill, uninitialized_fill constructs the objects in-place, instead of just copying the value to them. This allows to obtain fully constructed copies into a range of uninitialized memory, such as a memory block obtained by a call to get_temporary_buffer or malloc.

The behavior of this function template is equivalent to:
1
2
3
4
5
6
7
template < class ForwardIterator, class T >
  void uninitialized_fill ( ForwardIterator first, ForwardIterator last, const T& x )
{
  for (; first!=last; ++first)
    new (static_cast<void*>(&*first))
      typename iterator_traits<ForwardIterator>::value_type(x);
}

Parameters

first, last
Forward iterators to the initial and final positions in an uninitialized sequence. The range affected is [first,last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.
x
Value to be used to fill the range.

Return value

none

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// uninitialized_fill example
#include <iostream>
#include <memory>
#include <string>

int main () {
  // get block of uninitialized memory:
  std::pair <std::string*,std::ptrdiff_t>
    result = std::get_temporary_buffer<std::string>(3);

  if (result.second>0) {
    std::uninitialized_fill ( result.first, result.first+result.second, "c++ rocks!" );

    for (int i=0; i<result.second; i++)
      std::cout << result.first[i] << '\n';

    std::return_temporary_buffer(result.first);
  }

  return 0;
}

Output:
c++ rocks!
c++ rocks!
c++ rocks!


Complexity

Linear: Constructs (copy constructor) as many objects as the number of elements in the range [first,last).

See also