【发布时间】:2021-03-27 13:18:20
【问题描述】:
缩小(减小大小)std::vector<int> 的时间复杂度是多少?
我知道它不会重新分配内存。在自定义类上,它可能需要
为所有被移除的元素调用析构函数。但是对于整数,
缩小规模会在恒定时间内发生吗?
【问题讨论】:
-
基本类型没有析构函数,但
vector可能在内部使用placement-new并且仍然可以在它们上调用析构函数,这是允许的。编译器可能足够聪明,可以意识到析构函数调用是无操作的并优化它们,或者vector实现可能专门用于实现它并跳过它们,无论哪种方式都会导致调整大小有效地为 O(1),因为唯一的操作就是减少size()的值。这实际上取决于`vector``的实现,我认为没有概述不同类型的时间复杂度。
标签: c++ vector stl time-complexity stdvector