std::uninitialized_fill_n
From cppreference.com
| Defined in header <memory>
|
||
| template< class ForwardIt, class Size, class T > void uninitialized_fill_n( ForwardIt first, Size count, const T& value ) |
||
Copies the given value value to the first count elements in an uninitialized memory area beginning at first.
If an exception is thrown during the initialization, the function has no effects.
Contents |
[edit] Parameters
| first | - | the beginning of the range of the elements to initialize |
| count | - | number of elements to construct |
| value | - | the value to construct the elements with |
| Type requirements | ||
-ForwardIt must meet the requirements of ForwardIterator.
| ||
[edit] Return value
Iterator to the element past the last element copied.
[edit] Complexity
Linear in count
[edit] Possible implementation
template< class ForwardIt, class Size, class T > void uninitialized_fill_n(ForwardIt first, Size count, const T& value) { typedef typename std::iterator_traits<ForwardIt>::value_type Value; ForwardIt current = first; try { for (; count > 0; ++current, --count) { ::new (static_cast<void*>(&*current)) Value(value); } } catch (...) { for (; first != current; ++first) { first->~Value(); } throw; } } |
[edit] Example
Run this code
#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_n(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
[edit] See also
| copies an object to an uninitialized area of memory (function template) |