在向量中插入数据时,复制构造函数多次调用

Alo*_*lok 0 c++

#include <iostream>
#include <vector>
using namespace std;
class base
{
    int x;
public:
    base(int k){x =k; }
    void display()
    {
        cout<<x<<endl;
    }

    base(const base&)
    {
        cout<<"base copy constructor:"<<endl;
    }
};
int main()
{
    vector<base> v;
    base obase[5]={4,14,19,24,29};
    for(int i=0; i<5; i++)
    {
        v.push_back(obase[i]);
    }

}
Run Code Online (Sandbox Code Playgroud)

将数据插入向量时,使用复制构造函数将复制到该数据转到向量.

当我运行这个程序时,

  1. 对于第一次插入(i = 0),调用一次复制构造函数.
  2. 对于第二次插入(i = 1),调用两次复制构造函数
  3. 对于第三次插入(i = 3),调用三次复制构造函数
  4. 对于第四次插入(i = 3),调用四次复制构造函数
  5. 对于第五次插入(i = 4),调用五次复制构造函数

请任何人告诉我为什么会这样?对于每次插入,复制构造函数不应只调用一次吗?

Cub*_*bbi 7

调用根据需要push_back()增加向量的大小,这涉及复制向量的内容.既然你已经知道它将包含五个元素,或者v.reserve(5);在循环之前,或者使用范围构造函数:

base obase[5]={4,14,19,24,29};
vector<base> v(obase, obase+5);
Run Code Online (Sandbox Code Playgroud)