看了一下vector.erase的工作原理后,我不确定std :: vector :: erase在向量的第一个元素上的运行时复杂度。时间会恒定吗?
答案 0 :(得分:1)
来自[vector.modifiers](重点是我):
迭代器擦除(const_iterator位置);
迭代器擦除(首先是const_iterator,最后是const_iterator);[...]
复杂度:T的析构函数被称为等于擦除的元素数的次数,但 T的赋值运算符被称为与T之后的向量中的元素数相等的次数。删除的元素。
因此,当您擦除第一个元素时,会得到一个析构函数调用和size() - 1
分配,这是线性时间复杂度。