c++ emplaceback 与pushback区别
时间: 2023-05-02 15:06:28 浏览: 205
c++push_back 以及 emplace_back 的区别
c++中,vector是一个存储任意类型对象的动态数组容器,emplace_back和push_back都是vector类的成员函数,用于向vector容器中添加元素。它们的区别在于如何添加元素。
push_back方法可以接收一个元素作为参数,将该元素添加到vector容器的末尾。例如:
```
std::vector<int> v;
v.push_back(3);
```
上述代码将数字3添加到了vector v的末尾。如果添加的元素是一个类对象或结构体,那么push_back方法将调用相应的复制构造函数或移动构造函数。下面的代码演示了添加一个自定义类实例的操作:
```
class MyClass {
public:
MyClass() { std::cout << "Default constructor\n"; }
MyClass(const MyClass& x) { std::cout << "Copy constructor\n"; }
};
std::vector<MyClass> v;
MyClass obj;
v.push_back(obj);
```
以上代码的输出结果是:
```
Default constructor
Copy constructor
```
可以看到,push_back方法调用了MyClass类的复制构造函数。
而emplace_back方法则更加灵活,它不仅可以接受一个元素作为参数,还可以接受多个参数,用来构造新创建的元素。例如:
```
std::vector<std::string> v;
v.emplace_back("hello", 5);
```
上述代码创建了一个std::string类型的对象,该对象的值是"hello",长度是5,然后将该对象添加到vector v的末尾。如果添加的元素是自定义类的实例,那么emplace_back方法将调用相应的构造函数,而不是复制构造函数或移动构造函数。
因此,总的来说,emplace_back方法比push_back方法更高效。因为使用emplace_back时,不需要创建一个临时对象,也不需要将对象复制或移动到vector容器中。
阅读全文