2023年11月12日
[C++] push_back和emplace_back区别
区别
-
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 constructorTim move constructor<<<<<< emplace_back <<<<<<Tim constructor