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

标签 c++ memory-management stdvector

我理解在 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/

相关文章:

c++ - 在Money更改程序中正确计算美元-C++

c++ - 如何正确实现在 Cuda/C++ 中从主机和设备代码调用其成员的类?

c++ - 当我在 C++ 中对未初始化的指针调用 "delete"时会发生什么?

c - 如何在 C 中声明和使用包含 10 亿个整数的巨大数组?

c++ - 在 C++ 中创建 vector 数组

c++ - Qt:使用uic生成ui_类,通过类名动态加载

c++ - WinAPI 单击按钮时没有任何反应

c++ - 多维数组 (C++)

c++ - 前面有 `std::partial_sum` 的 `0` 最干净的方法是什么?

c++ - 如何洗牌 std::vector?