本文主要是介绍C++11特性——STL容器push_back与emplace_back,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C++11新加入了emplace_back()
:
如果要将一个临时变量push到容器的末尾,push_back()需要先构造临时对象,再将这个对象拷贝到容器的末尾,而emplace_back()则直接在容器的末尾构造对象,这样就省去了拷贝的过程。
上代码:
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;class A {
public:A(int i){str = to_string(i);cout << "构造函数: " << i << endl; }~A(){}A(const A& other): str(other.str){cout << "拷贝构造: " << str << endl;}public:string str;
};int main()
{vector<A> vec;vec.reserve(10);for(int i=0;i<10;i++){vec.push_back(A(i)); //调用了10次构造函数和10次拷贝构造函数,// vec.emplace_back(i); //调用了10次构造函数一次拷贝构造函数都没有调用过}
}
这篇关于C++11特性——STL容器push_back与emplace_back的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!