向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别

What is the difference between the time complexities of vector <int> a {N, 0} and int arr a[N] = {0}

本文关键字:int 时间复杂度 什么 区别 arr lt 向量 gt      更新时间:2023-10-16

当使用固定变量初始化vector <int> a {N, 0}int arr a[N] = {0}时,它们的时间复杂性之间有什么区别?

如果两者相同,那么在初始化数组时,我们可以使用什么技术来降低程序的时间复杂性?

向量数据在堆上分配,数组在堆栈上分配。除此之外,希望您的编译器将两者都优化为单个memset(0)

要知道确切的时间,您需要在编译器上自己进行基准测试。我怀疑这将花费大量的时间,不过,你的程序的其余部分可能会更慢。

先写你的程序,看看它是否足够快。如果不是,那么对它进行分析,并集中精力处理慢的部分。在你还不知道是否需要之前就进行这样的小优化通常是徒劳的。

Vector在堆中分配内存,因此为Vector分配内存的成本很低,因为堆数据结构需要在堆中搜索可用的内存块。在数组的情况下,内存是在堆栈中分配的,这相当于减少了堆栈指针。然而,向量和数组初始化几乎需要相同的时间,因为两者都使用memset,然后映射到stos硬件指令。主要区别在于分配内存。当我开发一个高性能软件时,我确实发现分配和初始化向量需要花费大量时间(取决于大小(。

向量和数组初始化的时间复杂度相同。矢量分配比矢量昂贵得多。