vector的入队

 

  • 这样会使用复制构造函数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);
	
} 

 

posted @ 2023-09-12 18:15  iu本u  阅读(38)  评论(0)    收藏  举报