- 这样会使用复制构造函数6次;push_back()是往后推,会复制一份
struct Vectex{
float x,y,z;
Vectex(float x,float y,float z)
:x(x),y(y),z(z)
{}
Vectex(const Vectex& Vectex)
:x(Vectex.x),y(Vectex.y),z(Vectex.z)
{
std::cout<<"Copied!"<<std::endl;
}
};
int main(){
std::vector<Vectex>Vectexies;
Vectexies.push_back(Vectex(1,2,3));
Vectexies.push_back(Vectex(4,5,6));
}
- 使用emplace_back()是在原地开始推,调用复制函数3次
struct Vectex{ float x,y,z; Vectex(float x,float y,float z) :x(x),y(y),z(z) {} Vectex(const Vectex& Vectex) :x(Vectex.x),y(Vectex.y),z(Vectex.z) { std::cout<<"Copied!"<<std::endl; } }; int main(){ std::vector<Vectex>Vectexies; Vectexies.emplace_back(Vectex(1,2,3)); Vectexies.emplace_back(Vectex(4,5,6)); }
- reserve先预定存放三个Vectex对象的空间,然后直接通过传参方式调用构造函数,不复制
#include<iostream>
#include<vector>
struct Vectex{
float x,y,z;
Vectex(float x,float y,float z)
:x(x),y(y),z(z)
{}
Vectex(const Vectex& Vectex)
:x(Vectex.x),y(Vectex.y),z(Vectex.z)
{
std::cout<<"Copied!"<<std::endl;
}
};
int main(){
std::vector<Vectex>Vectexies;
Vectexies.reserve(3);//预定空间
Vectexies.emplace_back(1,2,3);//存储参数
Vectexies.emplace_back(4,5,6);
}
标签:Vectex,emplace,float,back,入队,vector,Vectexies,const From: https://www.cnblogs.com/wangkaixin-yy/p/17697477.html