在这种情况下使用std :: vector的哪个构造函数

时间:2010-03-13 15:45:56

标签: c++ stl stdvector

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

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

然而,看看std :: vector的documentation我看到它的构造函数是

的形式
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);

我通过自己的分配器,也工作?

3 个答案:

答案 0 :(得分: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.
}

答案 1 :(得分:6)

(或许)澄清:

创建名为v of 100 elements的矢量对象:

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

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

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

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

答案 2 :(得分:0)

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

  

显式向量(size_type n,const   T&安培; value = T(),const Allocator&amp; =   分配器());

此构造函数将要放入vectorvalue的元素数量,这些元素将插入向量n次。如果您未指定value,则使用向量类型value的默认构造函数构造T。这里是int的“默认”构造函数,它将它初始化为0(没有int的默认构造函数,但是C ++标准说int被初始化为在这种情况下为0)。