我理解在 C++ 中,std::vector::resize
当新大小更小时,不分配新内存。此外,如果元素类型是具有析构函数的用户定义类,则可以为调整大小中“丢失”的每个元素调用该析构函数,因此在这种情况下,运行时间将与大小差异成线性关系。
但是,如果元素类型是原始类型,例如std::vector<int>
,没有可调用的析构函数。在那种情况下,有什么理由 resize
向下不会是 O(1) 时间吗?
最佳答案
对于这种复杂性,标准中似乎没有任何保证。但是,正如您所指出的那样,在这种情况下,似乎也没有理由超过常量的复杂性。复杂度只能保证为 O(n)
。
我会很惊讶地发现一个编译器将它实现为原始类型的线性,但确定编译器设置的最佳方法是进行简单测试。
关于c++ - 如果元素类型是基本类型,std::vector::resize() 是否向下花费 O(1) 时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51290774/