Равен ли цикл allocator.construct std :: uninitialized_copy?

В этом контексте 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);
}
7
задан orlp 14 January 2014 в 09:49
поделиться