为什么C ++ 11中没有向量(size_type n,const Allocator& alloc)?

时间:2012-02-23 22:24:49

标签: c++ vector c++11 allocator

在C ++ 11中,std :: vector具有构造函数vector(size_type n),它将默认构造n项,这些项可以与默认的可构造,可移动,不可复制的类一起使用。 / p>

但是,与其他每个矢量构造函数不同,没有采用分配器的变体,我采用了以下方法:

// 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)从标准中删除了?

2 个答案:

答案 0 :(得分:7)

首先,您可以简单地使用reserve来实现您想象的构造函数所能做的事情,而不是您的resize / loop thingy:

const int n = 10;
std::vector<Foo, Alloc> foos(allocator);
foo.resize(n);

另一种选择是使用size_type n构造函数的三个参数版本:

const int n = 10;
std::vector<Foo, Alloc> foos(n, Foo(), allocator);

虽然这实际上是副本构建到元素中,这可能是也可能是不可接受的。

理由是什么?不知道。可能被忽视了。

答案 1 :(得分:7)

在考虑之后,它可能不是一个缺陷。

allocator_typevalue_type可能是相同的类型。在这种情况下,vector(3, alloc)会调用哪个函数?采用默认值进行复制初始化为所有元素的构造函数,或者采用大小和分配器的元素?这是不明确的,因而是编译错误。