В этом контексте T
- это определенный тип, а распределитель
- объект распределителя для этого типа. По умолчанию это std :: allocator
, но это не обязательно так.
У меня есть часть памяти, полученная allocator.allocate (n)
. У меня также есть контейнер con
из T
объектов (скажем, a std :: vector
). Я хочу инициализировать этот фрагмент памяти объектами T
.
Расположение фрагмента памяти хранится в T * data
.
Это два примера кода всегда идентичны?
#include <memory>
// example 1
std::uninitialized_copy(con.begin(), con.end(), data)
// example 2
std::vector<T>::const_iterator in = con.begin();
for (T* out = data; in != con.end(); ++out, ++in) {
allocator.construct(out, *in);
}
А для этих двух?
#include <memory>
T val = T(); // could be any T value
// example 3
std::uninitialized_fill(data, data + n, val)
// example 4
for (T* out = data; out != (data + n); ++out) {
allocator.construct(out, val);
}