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

does std::vector::resize() downward take O(1) time if the element type is a primitive?

我了解到在 C++ 中,std::vector::resize 在新大小较小时不会分配新内存。此外,如果元素类型是具有析构函数的用户定义 class,则可以为调整大小中 "lost" 的每个元素调用该析构函数,因此在这种情况下 运行 时间尺寸差异是线性的。

但是,如果元素类型是基本类型,例如std::vector<int>,没有可调用的析构函数。在那种情况下,有什么理由 resize 向下不会是 O(1) 时间?

对于这种复杂性,标准中似乎没有任何保证。但是,正如您所指出的那样,在这种情况下,似乎也没有理由超过常量的复杂性。复杂度只能保证为 O(n).

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