我必须从文件中读取未知数量的行并将它们保存到结构中(我希望避免使用预处理来计算元素的总数)。 在阅读阶段之后,我必须对这些行的每个元素进行一些计算。
我想出了两种方法:
每次读取行时都使用realloc
。这样,分配阶段很慢,但由于索引访问,计算阶段更容易。
每次读取行时都使用链接列表。这样,分配阶段更快,但计算阶段更慢。
从复杂的角度来看,什么是更好的?
答案 0 :(得分:8)
您多久会浏览一次链表?如果它只是一次去链表。还有一些事情:那会有很多小额分配吗?您可以制作一些较小的缓冲区,让我们说10行并链接那些togeteher。但这都是剖析问题。
我先做最简单的事情,看看是否符合我的需要,然后再考虑优化。
有时,即使第二个最佳解决方案也能完美地满足需求,人们也会浪费太多时间来考虑最优解决方案。
答案 1 :(得分:5)
如果没有关于如何使用这些信息的更多细节,那么评论复杂性就有点难了。但是,这里有一些想法:
答案 2 :(得分:1)
正如其他用户已经说过的那样:
唐纳德克努特过早优化是其根源 所有的邪恶
我使用realloc
提出了不同的建议:在C ++ STL中,std::vector
容器每次插入对象时都会增长,并且没有足够的空间可用。增长的大小取决于当前预先分配的大小,但具体是实现。例如,您可以保存预分配对象的实际数量。如果大小用完,则使用当前分配的双倍空间调用reallocate
。我希望这有点可以理解!
当然,你应该分配更多的空间,而不是实际消耗和需要的空间。