C++11新特性(27)-容器的emplace成员

C++11新特性(27)-容器的emplace成员**问题还是老问题**。  :left{l},top{t}。当需要向容器添加Rect对象时,代码大致是这样的:。

大家好,欢迎来到IT知识分享网。

C++11新特性(27)-容器的emplace成员

问题还是老问题

考虑下面的Rect类:

struct Rect {  Rect(int l,int t,int r,int b)    :left{l},top{t}    ,right{r},bottom{b}   {}   int left;   int top;   int right;   int bottom; };

当需要向容器添加Rect对象时,代码大致是这样的:

std::list<Rect> rlist; rlist.push_front(Rect(10,10,20,20));

在调用push_front时,首先构造一个临时的Rect对象传递给push_front方法,然后在push_front的内部,在复制一个Rect对象添加到容器中。全过程会发生一次创建动作和一次拷贝动作,才能将对象的内容添加到list当中去。

emplace成员

为了减少拷贝动作的次数,当然可以使用右值引用参数的成员函数。除此之外,C++11还提供了另一种方法:emplace成员。使用这个成员可以直接传递用于生成对象的参数,对象的创建过程交给容器去执行:

std::list<Rect> rlist; rlist.emplace_front(10,10,20,20);

用法非常简单,只要保证参数和元素构造函数的参数相同即可。

除了emplace_front以外,C++11还提供了emplace和emplace_bak方法,分别对应insert和push_back方法。

emplace语义

为了更好的理解和说明emplace,去百度查了一下,结果如下:

C++11新特性(27)-容器的emplace成员

并没有发现什么有价值的线索,权当学英语了。。。

作者观点

当创建对象的目的只是为了将其添加到容器中时,emplace提供了右值引用以外的另一个选择。

觉得本文有帮助?请分享给更多人。

关注【面向对象思考】,轻松学习每一天!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/80699.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信