在前面的章节《初识STL中的vector容器》我们曾谈到vector插入元素的方法,想必大家只知道push_back()这个尾插函数吧,其实,在c++11后,vector还有一个尾插函数,那就是emplace_back(),em的意思是进入,place的意思是位置,emplace_back()就是放到最后面的意思。

不是都有push_back()了吗,这么还会有emplace_back()呢?其实这跟array有异曲同工之处,好比array是vector的轻量级,emplace_back()是push_back()的优化。要知道,push_back()函数是先构造对象,然后进行拷贝或移动到数组尾部,得分两步走;而emplace_back()则直接一步到位,直接在尾部构造对象,避免拷贝或移动这个步骤,提高了效率。此时你可能在想,也就多一个流程,好像对效率影响微不足道。确实,对于int、double这些基础数据类型产生的影响确实是微乎其微,可是,如果是一个“笨重”的对象呢?假如这个对象具有动态内存,那么拷贝或移动过程无疑是费时费力。这时emplace_back()的优势就展示出来了。

接下来我将演示如何使用emplace_back()函数添加元素。

#include<bits/stdc++.h>
/* emplace_back()函数进行尾增元素 */
using namespace std;
void test()
{
vector<int> v;
for(int i=0;i<5;++i) 
{
v.emplace_back(i);
}
cout << v.size() << '\n';
} 
int main(){
    test();
    return 0;
}

总结:emplace_back()比push_back()更加高效安全,避免了多余的移动或构造过程,为了养成好习惯,建议优先使用emplace_back()函数。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)