对于vector容器,我们现在已经很熟悉尾插法push_back()和emplace_back()了,并且我们还知道在面对复杂对象的时候,使用emplace_back()的效率更高。但是当我们需要在vector内其他位置插入元素,该怎么办呢?别着急,insert()或emplace()能够帮助你解决这个问题。vector里,insert()和emplace()都能够在指定位置前插入元素,相同点是他们的第一个参数有且只能是位置迭代器,不同点在于insert()能实现多个插入,而emplace()只能实现单个插入。其原因也很简单,上一章《都c++11了,还有人不知道emplace_back()?》我们简单讨论了emplace_back()成员函数,其功能是直接在尾部构造对象,避免多余移动,由于对象只能是单个,所以emplace()只能支持单个元素。而insert可以既可以插入n个相同的数,又能通过{}插入多个不同的数。下面我将分别展示insert()和emplace()的插入方法:

#include<bits/stdc++.h>
using namespace std;
/*通过insert()插入单个或多个元素*/
void test_insert()
{
cout << "通过insert()进行插入语元素操作:\n"; 
vector<int> v{1,2,3,4,5};
/*方法1,假如要在第三个元素前插入一个元素0*/
v.insert(v.begin()+2,0);
cout << "插入元素成功,此时第3个元素是:" << v[2] << '\n';
/*方法2,假如要在第三个元素前插入5个6*/
v.insert(v.begin()+2,3,6);
cout<<"能够看到0前面有3个6:\n";
for(int i=0;i<v.size();++i)cout << v[i] << " ";
cout << '\n';
/*方法3,假如要在第三个元素前插入7、8、9、这三个元素*/
v.insert(v.begin()+2,{7,8,9});
cout<<"能够看到6前面有7、8、9:\n";
for(int i=0;i<v.size();++i)cout << v[i] << " ";
cout << '\n';
cout << '\n';
} 
/*通过emplace()插入单个元素*/
void test_emplace()
{
cout << "通过emplace()进行插入语元素操作:\n";
vector<int> v{1,2,3,4,5};
/*假如要在第三个元素前插入一个元素0*/
v.emplace(v.begin()+2,0);
cout << "插入元素成功 此时第3个元素是" << v[2] << '\n';
} 
int main(){
    test_insert();
test_emplace();
    return 0;
}

代码运行后结果belike:

insert()和emplace()实操

可以看到,我们的已经成功完成了插入元素要求。其实插入语法也不难,没必要死记硬背,能用就行,总结以下就三点:

1. 如果是插入单个元素,选emplace()无疑,直接构造对象避免移动和析构。

2. 如果需要插入多个元素,选insert()没错,单个元素、多个元素、n个相同元素满足个性化需要。

3. 不管怎样,第一个参数必须记住是位置迭代器!

点赞(0)

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

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

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

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

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

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

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

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

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