【发布时间】:2020-05-05 21:21:21
【问题描述】:
我想以恒定时间复杂度 O(1) 删除整数向量的最后 n 个元素。我认为这应该是可行的,因为只需要对结束指针进行一些算术运算。但是,擦除、调整大小和删除都具有 O(n) 复杂度。有什么功能可以用?
【问题讨论】:
-
std::vector::resize()? en.cppreference.com/w/cpp/container/vector/resize -
@PaulSanders 它说它的复杂性是线性的
-
我认为这仅适用于非原始类型,当需要调用
n析构函数时。对于ints,不需要调用析构函数,它应该是 O(1)。 -
@PaulSanders 我明白了,我认为它适用于所有事情。你是否也知道从前面移除是否也是 O(1)?
-
不,不是,因为向量必须向左移动一个位置,这是向量中剩余元素数量的线性复杂度。
标签: c++ time-complexity stdvector