c++ - 向 vector 中插入数据时多次调用复制构造函数

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

}

当数据插入 vector 时,使用复制构造函数将该数据复制到 vector。

当我运行这个程序时,

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

谁能告诉我为什么会这样?对于每次插入,复制构造函数不应该只被调用一次吗?

最佳答案

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

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

关于c++ - 向 vector 中插入数据时多次调用复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6296579/

相关文章:

c++ - Qt与Firmata链接

C++ - 字符串流 << "overwriting"

c++ - C++ 中的 C# Linq 表达式

c++ - 为什么header中的static const在代码文件中定义为const

c++ - 递归结构的 vector 存在内存问题

C++ for each loop with mutating vector

c++ - 如何在类内部定义结构?

c++ - 如何证明大 O 符号

c++ - 错误 : control Reaches end of non void function

c++ - addTouchEventListener的参数是什么