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

2025-05-27 0 79

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下编译通过):

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43
#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";

}

}

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C++ 中"emplace_back" 与 "push_back" 的区别 https://www.kuaiidc.com/73855.html

相关文章

发表评论
暂无评论