如何在使用向量调整大小时调用非默认构造函数?

时间:2014-10-02 11:24:36

标签: c++ vector constructor c++03

假设我创建了一个类

class Foo
{
public:
    Foo(int numofCars, int someValue);

private: 
    vector<Car> carList;
}

Foo::Foo(int numofCars, int someValue)
{
    carList.resize(numofCars);
}

我的理解是,在调整向量之后(carList为空vector)将通过调用默认构造函数成为Car对象的列表。

我可以指定被调用的Car对象的构造函数吗?例如,我想调用Car()

,而不是调用Car(int Value)

1 个答案:

答案 0 :(得分:1)

是的,你可以。 (live example)

carList.resize(numofCars, Cars(42));

see more information


如果您不愿意制作不必要的副本,则代码有点复杂。

carList.reserve(numofCars);
for (int i = 0; i < numofCars; i++)
    carList.emplace_back(42);

(live example)

它可能更好,但它始终有效 - 如果“1创建+10复制”的成本低于“10创建”的成本。这将是个案。