欢迎关注公众号(20YC编程),视频号也有免费视频课程哦!
-今日内容-
1 emplace_back介绍
std::vector的emplace_back(包括emplace)函数是C++11引入的新特性,用于在容器中直接构造元素,而不是先构造元素再插入。这可以减少复制和销毁的开销,提高效率。
emplace_back(): 在容器的尾部直接构造一个元素。
emplace(): 在指定的位置直接构造一个元素。
2 push_back和emplace_back函数的差别
std::vector的push_back和emplace_back函数都是用于将元素添加到动态数组的尾部。但在功能上有些微妙的差异,主要体现在它们的参数传递方式和构造函数调用的效率上。
-
参数传递方式:
push_back:接受右值引用或常量引用参数,这意味着你可以直接传递一个值或者一个临时对象给它。
emplace_back:接受与将要构造的元素类型相同的参数,它会直接在容器内部构造元素,而不是先构造一个临时对象再复制或移动到容器中。
-
构造函数调用:
push_back:如果传递给它的参数是一个临时对象(rvalue),那么会调用拷贝构造函数;如果是一个左值,则调用移动构造函数。
emplace_back:直接调用元素类型的构造函数,在容器内部构造元素,避免了额外的拷贝或移动操作。
-
效率:
在大多数情况下,由于emplace_back避免了额外的拷贝或移动操作,所以它通常比push_back更高效。
-
使用场景:
如果你知道元素的类型和构造函数的参数,并且想避免不必要的拷贝或移动操作,那么应该使用emplace_back。
如果你有一个临时的对象,或者想明确地指定拷贝或移动语义,那么可以使用push_back。
-
总结:
总的来说,如果你关心性能并且可以控制元素的构造方式,那么emplace_back是一个更好的选择。
-【End】-
喜欢本文章,记得点赞、分享、关注哦~