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

Boj*_*ack 12 c++ vector c++11

让我们说我们有A类:

Class A
{
    public:
       A() = delete;
       A( const int & y )
       : x( y )
       {}
    private:
       int x;
};
Run Code Online (Sandbox Code Playgroud)

如何创建一个std::vector类型A并给出A构造函数的参数?我将如何添加3vector

Mik*_*our 21

如何创建一个std::vector类型A并给出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
Run Code Online (Sandbox Code Playgroud)

我如何将3加到向量中?

v.emplace_back(3);          // works with any suitable constructor
v.push_back(3);             // requires a non-explicit constructor
Run Code Online (Sandbox Code Playgroud)

缺少默认构造函数只意味着你不能做需要的操作,比如

vector<A> v(10);
v.resize(20);
Run Code Online (Sandbox Code Playgroud)

两者都将默认构造的元素插入到矢量中.


Que*_*tin 6

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

std::vector<A> v;
Run Code Online (Sandbox Code Playgroud)

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

std::vector<A> v(100);
Run Code Online (Sandbox Code Playgroud)

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

v.emplace_back(42);
Run Code Online (Sandbox Code Playgroud)