没有默认构造函数的类向量

时间:2015-04-28 13:05:29

标签: c++ c++11 vector

让我们说我们有A类:

Class A
{
    public:
       A() = delete;
       A( const int & y )
       : x( y )
       {}
    private:
       int x;
};

如何创建std::vector类型A并为A的构造函数提供参数?如何将3添加到vector

3 个答案:

答案 0 :(得分:21)

  

如何创建类型为mysql_fetch_assoc()的{​​{1}}并为std::vector的构造函数提供参数?

A
  

我如何向矢量添加3?

A

缺少默认构造函数只意味着您无法执行需要的操作,例如

std::vector<A> v1(10, 42);  // 10 elements each with value 42
std::vector<A> v2{1,2,3,4}; // 4 elements with different values

这两个元素都将默认构造的元素插入到矢量中。

答案 1 :(得分:6)

模板不能一次性实例化:它们只实例化所需的内容。 A满足以下所有条件(构造空向量)有效:

std::vector<A> v;

但是,由于A没有默认构造函数,因此以下(创建具有默认初始化内容的向量)将失败:

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

这是一件好事。但是,有效的方法将被实例化:

v.emplace_back(42);

答案 2 :(得分:2)

诀窍在于如何向向量中添加元素以及您使用的向量的成员函数。

std::vector<A> v;
v.emplace_back(3);