一、insert有多个重载函数,可完成多种类型的插入
1、iterator insert(pos,element)
在迭代器pos位置之前,插入元素element。并返回新插入元素位置的迭代器。
2、iterator insert(pos,n,element)
在迭代器pos之前,插入n个element,并返回第一个新插入元素的迭代器(离pos最远那个)
3、iterator insert(pos , other_first , other_last)
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
4、iterator insert(pos,{1,2,3,4…})
在迭代器pos位置之前,插入大括号里的所有元素,并返回第一个元素的迭代器
二、emplace:原地构造一个元素插入容器中,效率非常高。
iterator emplace (const_iterator pos, args…);
pos 为指定插入位置的迭代器;args… 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
比如说vector中放的是类型T,使用emplace插入时,就要在pos 参数后写上T构造函数所需要的参数。emplace会在要插入的地方,利用T的构造函数原地构造出T的对象。省去了T的复制构造函数或移动构造函数的开销.
insert是构造对象,在利用T的复制构造函数在要插入的位置构造对象。
三、push_back()和emplace_back()
功能都是在容器末尾追加一个元素,emplace_back原理和上面一样,更推荐使用emplace_back.