首页 > 编程 > C++ > 正文

C++ 中"emplace_back" 与 "push_back" 的区别

2020-05-23 13:50:26
字体:
来源:转载
供稿:网友

 C++ 中"emplace_back" 与 "push_back" 的区别

emplace_backpush_back都是向容器内添加数据.

对于在容器中添加类的对象时, 相比于push_back,emplace_back可以避免额外类的复制和移动操作.

"emplace_back avoids the extra copy or move operation required when using push_back."

参见: http://en.cppreference.com/w/cpp/container/vector/emplace_back

注意下面代码中的emplace_back和push_back的添加方式(VS2012下编译通过):

#include <vector> #include <string> #include <iostream>  struct President {   std::string name;   std::string country;   int year;    President(std::string p_name, std::string p_country, int p_year)     : name(std::move(p_name)), country(std::move(p_country)), year(p_year)   {     std::cout << "I am being constructed./n";   }   President(President&& other)     : name(std::move(other.name)), country(std::move(other.country)), year(other.year)   {     std::cout << "I am being moved./n";   }   President& operator=(const President& other); };  int main() {   std::vector<President> elections;   std::cout << "emplace_back:/n";   elections.emplace_back("Nelson Mandela", "South Africa", 1994); //没有类的创建    std::vector<President> reElections;   std::cout << "/npush_back:/n";   reElections.push_back(President("Franklin Delano Roosevelt", "the USA", 1936));    std::cout << "/nContents:/n";   for (President const& president: elections) {     std::cout << president.name << " was elected president of "       << president.country << " in " << president.year << "./n";   }   for (President const& president: reElections) {     std::cout << president.name << " was re-elected president of "       << president.country << " in " << president.year << "./n";   } } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表