В C ++ 11 std :: vector имеет конструктор vector(size_type n)
, который по умолчанию создаст n
элементов на месте, которые могут использоваться с конструируемыми, перемещаемыми, не копируемыми классами по умолчанию.
Однако, в отличие от любого другого векторного конструктора, не существует варианта, который использует распределитель, и я прибегнул к следующему:
// Foo is default constructible and moveable, but not copyable
const int n = 10; // Want 10 default constructed Foos
std::vector<Foo, CustomAllocator> foos(allocator);
foos.reserve(n);
for (int i = 0; i < n; ++i)
foos.emplace_back();
Есть ли лучший способ сделать это?Есть ли конкретная причина, по которой vector(size_type n, const Allocator& alloc)
был исключен из стандарта?