如果元素类型是基元,std::vector::resize() 向下花费 O(1) 时间吗?

xda*_*liu 5 c++ memory-management stdvector

据我了解,在 C++ 中,std::vector::resize当新大小较小时不分配新内存。此外,如果元素类型是具有析构函数的用户定义类,则可以为调整大小中“丢失”的每个元素调用该析构函数,因此在这种情况下,运行时间将与大小差异呈线性关系。

但是,如果元素类型是原语,例如std::vector<int>,则无需调用析构函数。在这种情况下,是否有任何理由认为resize向下不会是 O(1) 时间?

JMA*_*MAA 2

标准似乎无法保证这种复杂性。然而,正如您所指出的,在这种情况下似乎也没有理由超过恒定的复杂性。复杂性仅保证为O(n)

我很惊讶地发现一个编译器将其实现为原始类型的线性,但确定编译器设置的最佳方法是进行一个简单的测试。