c++ - 使用 vector 调整大小时如何调用非默认构造函数?

标签 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);
}

我的理解是,在调整大小后, vector (carList 是一个空的 vector)将通过调用默认值变成 Car 对象的列表构造函数。

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

最佳答案

是的,你可以。 (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 次创建”的成本。这将视具体情况而定。

关于c++ - 使用 vector 调整大小时如何调用非默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26159759/

相关文章:

c# - Base 关键字在构造函数初始化中实际上做了什么?

c++ - 对象可能修改的函数

c++ - Visual Studio 2015 错误 C4996 'std::_Copy_impl' : Function call with parameters that may be unsafe

c++ - 如何在 Qt 中放大/缩小图像的选定部分?

c++ - 无法取消引用插入到 vector 中的类对象指针

c++ - vector<string> 在堆上,使用初始化列表?

python - 如何加载重载方法

c++ - gluLookAt 中的不连续性

r - 根据字符的有序向量过滤数据帧的行

带参数列表的 C++ 构造函数