我有一个记录列表,在开头我不知道记录的数量。我需要将它们读入数组。 因此,建议逐一阅读所有记录。一个接一个地做realloc&随着元素的来临,继续增加数组大小或者我应该花一个时间来识别记录的数量& malloc只做过一次吗?哪一个计算成本会低一些?
答案 0 :(得分:27)
realloc
并不是很贵。但是为每个元素调用realloc
有点多了。我建议你这样做:
正确猜测适当的初始大小也有帮助。因此,如果60%的输入少于100条记录,请从此开始。
答案 1 :(得分:3)
正如其他人所指出的那样,当数组变满时,将数据大小加倍是一种常用技术。实际上,使用这种技术可确保每个元素花费的时间不超过on WikiPedia。
根据代码需要的速度以及您正在读取的源代码,在单独的传递中计算输出的大小可能是个好主意。如果你正在从磁盘读取,你应该使用动态数组,否则你应该做更容易实现的事情。
答案 2 :(得分:0)
你不应该realloc( )
一个接一个。
此类事情的最佳策略取决于您正在做的事情的具体情况,但一种常见,简单且接近最佳的方法是每当您用完房间时将分配大小增加两倍你的阵列。
答案 3 :(得分:0)
如果可能的话,您也可以考虑使用链表而不是数组。只需添加malloc
即可添加新元素。