7

这看起来很简单,但我很困惑:我创建一百个向量的方式,比如说,ints 是

std::vector<int>  *pVect = new std::vector<int>(100);

但是,查看 std::vector 的文档,我发现它的构造函数是

explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );

那么,前一个是如何工作的呢?是否new使用从默认构造函数获得的初始化值调用构造函数?如果是这样的话,会

std::vector<int, my_allocator> *pVect = new std::vector<int>(100, my_allocator);

我在哪里通过自己的分配器,也可以吗?

4

3 回答 3

14

你做错了。如果您只需要当前范围和时间中的向量,只需将其创建为自动对象

std::vector<int> pVect(100);

构造函数具有第二个和第三个参数的默认参数。所以它可以用一个 int 来调用。如果你想传递一个自己的分配器,你必须传递第二个参数,因为你不能跳过它

std::vector<int, myalloc> pVect(100, 0, myalloc(some_params));

一个专门的例子可能会澄清这个问题

void f(int age, int height = 180, int weight = 85);

int main() { 
  f(25); // age = 25, height and weight taken from defaults.
  f(25, 90); // age=25, height = 90 (oops!). Won't pass a weight!
  f(25, 180, 90); // the desired call.
}
于 2010-03-13T16:01:44.907 回答
5

(也许)澄清:

要创建一个名为 v 的 100 个元素的矢量对象:

std::vector <int> v( 100 );

这使用将大小(100)作为第一个参数的向量构造函数。要创建一个包含 100 个元素的动态分配向量:

std::vector <int> * p = new std::vector<int>( 100 );

它使用完全相同的构造函数。

于 2010-03-13T16:01:16.327 回答
0

您正在创建vector一百个元素。正如您在发布的第二个代码示例中看到的那样:

显式向量 ( size_type n, const T& value= T(), const Allocator& = Allocator() );

此构造函数获取要放入的元素数量vector以及value将插入向量n时间的元素。如果您未指定 a valuevalue则使用您的向量类型的默认构造函数构造T。在这里,它将是“默认”构造函数,将int其初始化为 0(没有默认构造函数之类的东西int,但是 C++ 标准表示int在这种情况下初始化为 0)。

于 2010-03-13T16:05:07.037 回答