根据定义std :: vector :: insert保留吗?

Hum*_*awi 8 c++ vector c++11

在a上调用insert成员函数时std::vector,它会reserve在"推回"新项目之前吗?我的意思是标准保证与否?

换句话说,我应该这样做:

std::vector<int> a{1,2,3,4,5};
std::vector<int> b{6,7,8,9,10};
a.insert(a.end(),b.begin(),b.end());
Run Code Online (Sandbox Code Playgroud)

或者像这样:

std::vector<int> a{1,2,3,4,5};
std::vector<int> b{6,7,8,9,10};
a.reserve(a.size()+b.size());
a.insert(a.end(),b.begin(),b.end());
Run Code Online (Sandbox Code Playgroud)

还是其他更好的方法?

dkg*_*dkg 14

关于函数的复杂性[link]:

插入元素数量的线性(复制/移动构造)加上位置(移动)后的元素数量.

另外,如果插入(3)范围内的InputIterator不是至少是前向迭代器类别(即,只是输入迭代器),则不能预先确定新容量,并且插入会导致额外的对数复杂度(重新分配).

因此,有两种情况:

  • 新容量可以确定,因此您无需拨打预留
  • 新的容量无法确定,因此呼叫reserve应该是有用的.