vector中有一个push_back方法,用于在容器的末尾插入一个元素。后来在c++11中又增加了一个emplace_back方法,它和push_back的作用是一样的,既然两者的功能是一样的,那它们有什么区别呢?使用时如何选择?效率emplace_back在效率上优于push_back,请看下面的例子:#include#includeusingnamespacestd;classMyTest{public://通用构造MyTest(intid,intage):m_id(id),m_age(age){cout<<"ceateMyTestclass..."<vec;vec.储备(2);//预分配内存cout<<"\n------push_back--------"<vec1;矢量<我的测试>vec2;vec1.储备(1000000);vec2.储备(1000000);int64_tt1=cur_msec();对于(size_ti=0;i<1000000;i++){vec1.push_back(MyTest(1,20));}int64_tt2=cur_msec();对于(size_ti=0;i<1000000;i++){vec2.emplace_back(1,20);}int64_tt3=cur_msec();cout<<"push_backcost"<<(t2-t1)<<"millisecond"<,那么它构造一个包含1,000,000个元素的容器。按照每个元素4字节计算,第二行代码的执行需要分配差不多4M的内存空间。如何选择emplace_back的缺点是代码可读性比较差。因此,对于向容器尾部添加元素的操作,选择push_back会让你的代码更具可读性,更能表达代码编写者的意图,代码更加健壮。和上一节的例子一样,对于一个vector类型的容器vec,vec.emplace_back(1000000)是可以编译出来的,运行到这行代码之前可能没有发现错误,但是如果调用vec.push_back(1000000)in编译的时候会报错,可以早点发现问题。当然,由于emplace_back比push_back快,我们不能停止使用它,因为它容易出错。在对效率有要求的场景下,推荐使用emplace_back。当对效率要求不是那么高,或者emplace_back和push_back效率差别不大的时候,考虑到项目代码的可读性和可维护性,优先考虑push_back。