区别
- push_back 接受一个参数,会直接调用该参数类型的构造函数来创建一个临时对象,然后将这个临时对象通过拷贝或移动存储到 vector 中。
- emplace_back 接受的是可变数量的参数,它会直接在 vector 的内存空间上就地构造一个对象,而不需要临时对象。
实验
#include <iostream>
#include <vector>
class Tim
{
private:
int num_;
public:
Tim(int _num):num_(_num)
{
std::cout << "Tim constructor" << std::endl;
}
Tim(const Tim &_tim):num_(_tim.num_)
{
std::cout << "Tim copy constructor" << std::endl;
}
Tim(Tim &&_tim):num_(_tim.num_)
{
std::cout << "Tim move constructor" << std::endl;
}
};
int main()
{
std::vector<Tim> tim_vec_1;
std::vector<Tim> tim_vec_2;
std::cout << "<<<<<< push_back <<<<<<" << std::endl;
tim_vec_1.push_back(1);
std::cout << "<<<<<< emplace_back <<<<<<" << std::endl;
tim_vec_2.emplace_back(2);
return 0;
}
输出
<<<<<< push_back <<<<<<
Tim constructor
Tim move constructor
<<<<<< emplace_back <<<<<<
Tim constructor
发表回复