-
定义
和push_back()类似,emplace_back() 用来给容器中添加元素。
-
函数原型:
template <class... Args> void emplace_back (Args&&... args);
-
例子:
v.emplace_back("hello", 24); //无需先创建类 v.push_back(Student("hello", 23)); //需先创建类
-
push_back和emplace_back区别
push_back():向容器尾部添加一个右值元素,然后调用构造函数构造出这个临时对象,最后调用移动构造函数将这个临时对象放入容器中并释放这个临时对象。
注:最后调用的不是拷贝构造函数,而是移动构造函数。因为需要释放临时对象,所以通过std::move进行移动构造,可以避免不必要的拷贝操作
emplace_back():在容器尾部添加一个元素,调用构造函数原地构造,不需要触发拷贝构造和移动构造。因此比push_back()更加高效。struct TEST{ string name; int age; TEST(string&& n, int a) :name(std::move(n)), age(a) { cout << "构造" << endl; } TEST(const Student& s) : name(std::move(s.name)), age(s.age) { cout << "拷贝构造" << endl;; } TEST(Student&& s) :name(std::move(s.name)), age(s.age) { cout << "移动构造" << endl; } TEST& operator=(const TEST& s); }; int main() { vector<TEST> test1; vector<TEST> test2; cout << "emplace_back:" << endl; test1.emplace_back("hello", 24); cout << "push_back:" << endl; test2.push_back(TEST("hello", 23)); } //输出结果 emplace_back: 构造 push_back: 构造 移动构造
C++ emplace_back
最新推荐文章于 2024-09-27 08:01:54 发布
本文详细介绍了C++中容器操作`push_back()`与`emplace_back()`的区别。`push_back()`需要先创建临时对象再移动到容器中,而`emplace_back()`直接在容器尾部原地构造元素,避免了不必要的拷贝和移动,从而提高了效率。通过示例代码展示了两者的使用及输出结果,强调了`emplace_back()`的高效特性。
摘要由CSDN通过智能技术生成