在 C++ 中,emplace_back
和 push_back
都是向容器中添加元素的方法,但它们的实现方式和使用场景略有不同。
emplace_back
emplace_back
是 C++11 标准中引入的一个方法,用于向容器中添加一个元素,它与 push_back
类似,但在使用上具有更高的效率。emplace_back
不需要创建一个元素副本再插入容器,而是在容器中直接构造新元素。
以下是使用 emplace_back
方法向 vector
容器中添加元素的示例代码:
#include <iostream>
#include <vector>struct Student
{std::string name;int age;float score;
};int main()
{std::vector<Student> students;// 向 vector 容器中添加一个新元素students.emplace_back("John", 22, 95.0f);// 输出容器中的元素for (auto& s : students){std::cout << s.name << ", " << s.age << ", " << s.score << std::endl;}return 0;
}
上面的代码中,我们创建了一个 struct
类型的 Student
,然后使用 emplace_back
方法向 vector
容器中添加了一个新的 Student
对象。由于 emplace_back
方法会直接在容器中构造新元素,因此它可以避免在添加元素时的额外开销,从而提高代码的执行效率。
push_back
push_back
也是向容器中添加元素的方法,它是 C++ 标准库中众多容器中的一个成员函数。push_back
方法的作用是将一个元素添加到容器的尾部。相比于 emplace_back
,push_back
的使用要简单直接一些,但是它需要先创建一个元素副本再将其添加到容器中。
以下是使用 push_back
方法向 vector
容器中添加元素的示例代码:
#include <iostream>
#include <vector>struct Student
{std::string name;int age;float score;
};int main()
{std::vector<Student> students;Student s{"John", 22, 95.0f};// 将现有元素的副本推入 vector 容器中students.push_back(s);// 输出容器中的元素for (auto& s : students){std::cout << s.name << ", " << s.age << ", " << s.score << std::endl;}return 0;
}
上面的代码中,我们先创建了一个 Student
对象 s
,然后将其作为参数传递给 vector
容器的 push_back
方法。在这个例子中,我们先创建了 s
这个结构体对象,再将其的副本推入 vector
容器中。
从代码的角度来看,push_back
的使用比 emplace_back
略显繁琐。但是,在一些使用场景下,push_back
仍然是更适合的选择,例如当对象类型不提供默认构造函数时。