| Defined in header <memory> | ||
|---|---|---|
template< class ForwardIt, class T > void uninitialized_fill( ForwardIt first, ForwardIt last, const T& value ); |
Copies the given value to an uninitialized memory area, defined by the range [first, last) as if by.
for (; first != last; ++first)
::new (static_cast<void*>(std::addressof(*first)))
typename iterator_traits<ForwardIterator>::value_type(x);If an exception is thrown during the initialization, the function has no effects.
Parameters
| first, last | - | the range of the elements to initialize |
| value | - | the value to construct the elements with |
| Type requirements | ||
- ForwardIt must meet the requirements of ForwardIterator. | ||
Return value
(none).
Complexity
Linear in the distance between first and last.
Possible implementation
template<class ForwardIt, class T>
void uninitialized_fill(ForwardIt first, ForwardIt last, const T& value)
{
typedef typename std::iterator_traits<ForwardIt>::value_type Value;
ForwardIt current = first;
try {
for (; current != last; ++current) {
::new (static_cast<void*>(std::addressof(*current))) Value(value);
}
} catch (...) {
for (; first != current; ++first) {
first->~Value();
}
throw;
}
} |
Example
#include <algorithm>
#include <iostream>
#include <memory>
#include <string>
#include <tuple>
int main()
{
std::string* p;
std::size_t sz;
std::tie(p, sz) = std::get_temporary_buffer<std::string>(4);
std::uninitialized_fill(p, p+sz, "Example");
for (std::string* i = p; i != p+sz; ++i) {
std::cout << *i << '\n';
i->~basic_string<char>();
}
std::return_temporary_buffer(p);
}Output:
Example Example Example Example
See also
| copies an object to an uninitialized area of memory (function template) | |
| std::experimental::parallel::uninitialized_fill
(parallelism TS) | parallelized version of std::uninitialized_fill (function template) |
Please login to continue.