用固定变量初始化vector <int> a {N, 0}
和int arr a[N] = {0}
的时间复杂度之间有什么区别?
如果两者相同,那么在初始化数组时,我们可以使用哪些技术来降低程序中的时间复杂度?
答案 0 :(得分:0)
矢量数据分配在堆上,数组分配在栈上。除此之外,希望您的编译器会将两者都优化为单个memset(0)
。
要知道确切的时间,您需要自己在编译器上进行基准测试。我怀疑这会花费大量时间,但是程序的其余部分可能会变慢。
首先编写程序,看看其速度是否足够快。如果不是,则对其进行概要分析,并专注于慢速位。甚至在不知道是否需要优化之前进行这样的小优化通常都是徒劳的。
答案 1 :(得分:0)
向量在堆中分配内存,因此为向量分配内存的开销很小,因为堆数据结构需要搜索堆中可用的内存块。如果是数组,则将内存分配在堆栈中,这等效于减少堆栈指针。但是,向量和数组初始化几乎都需要相同的时间,因为两者都使用memset
,然后再映射到stos硬件指令。主要区别在于分配内存。在开发高性能软件时,我确实发现分配和初始化向量要花费大量时间(取决于大小)。
向量和数组的初始化时间复杂度相同。分配向量比向量要昂贵得多。