namespace std { template <class ForwardIterator, class Size> ForwardIterator uninitialized_value_construct_n(ForwardIterator first, Size n); // (1) template <class ExecutionPolicy, class ForwardIterator, class Size> ForwardIterator uninitialized_value_construct_n(ExecutionPolicy&& exec, ForwardIterator first, Size n); // (2) }
概要
未初期化領域の範囲のうち、先頭N個の要素を値構築する。
未初期化領域の入力範囲[first, first + n)
の各要素を値構築する (ゼロ初期化する)。
効果
以下と等価:
for (; n > 0; (void)++first, --n) ::new (static_cast<void*>(addressof(*first))) typename iterator_traits<ForwardIterator>::value_type(); return first;
例
#include <iostream> #include <memory> struct Vector { int x, y; }; int main() { std::allocator<Vector> alloc; // メモリ確保。 // この段階では、[p, p + size)の領域は未初期化 const std::size_t size = 3; Vector* p = alloc.allocate(size); // 未初期化領域[p, p + size)を値構築 std::uninitialized_value_construct_n(p, size); // 各要素を出力 for (std::size_t i = 0; i < size; ++i) { const Vector& v = *(p + i); std::cout << v.x << ',' << v.y << std::endl; } // オブジェクトを破棄 std::destroy(p, p + size); // メモリ解放 alloc.deallocate(p, size); }
出力例
0,0
0,0
0,0
バージョン
言語
- C++17
処理系
- Clang: 4.0.1
- GCC: 7.3
- Visual C++: ??