Cas*_*let 4 c++ vector capacity
#include<iostream>
#include<vector>
#include<list>
#include<queue>
#include<map>
using namespace std;
class dog{
public:
string name;
dog();
dog(const dog & d);
void barkname(){
cout<<"bark "<<name<<endl;
}
virtual ~dog(){
//cout<<"delete dog "<<name<<endl;
}
};
dog::dog(){
cout<<"blank dog"<<endl;
this->name="blank";
}
dog::dog(const dog &d){
cout<<"copy dog"<< " "+d.name<<endl;
string temp=d.name;
this->name=temp+" copied";
}
int main(){
dog d;
d.name="d";
dog dd;
dd.name="dd";
dog ddd;
ddd.name="ddd";
vector<dog> doglist;
doglist.push_back(d);
doglist.push_back(dd);
doglist.push_back(ddd);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你好,我是cpp的新手.我试图在我的班级狗中使用复制构造函数.我使用push_back三次将三只狗推入载体.所以我期望复制构造函数被调用三次.但是,执行代码后,我发现复制构造函数被调用了六次,结果如下:
blank dog
blank dog
blank dog
copy dog d
copy dog dd
copy dog d copied
copy dog ddd
copy dog d copied copied
copy dog dd copied
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么狗被复制了很多次.我只执行了三次push_back.谢谢.
感谢您指出一个类似的问题: 为什么在执行vector.push_back时调用copy-constructor两次
在这篇文章中,作者只有push_back一个对象,但复制构造函数被调用了两次.但是,在我的情况下,当我调用push_back一次时,复制构造函数只被调用一次.我已经明白我的问题所在,谢谢大家的帮助.
Lig*_*ica 17
向量需要一些地方来放置你的狗,所以它为它们分配内存.但它不能分配无限的内存.当您添加更多狗时,矢量需要分配更大的内存块,每次执行此操作时,它必须将您的狗重新安置到新家.与你目前设计的课程一样,唯一的方法是复制它们,然后将原件放入睡眠状态.
如果你首先为所有的狗保留了足够的空间(如下图所示),那么这就没有必要了,你的狗可能已经开始做正确的麻烦,没有分心不断搬家.
doglist.reserve(3);
Run Code Online (Sandbox Code Playgroud)