【发布时间】:2012-07-14 14:57:51
【问题描述】:
考虑一下这个简单的 Python 程序:
n=int(input("enter your lower limit"))
m=int(input("enter your higher limit"))
list=[]
x=n
while x<=m:
if (x%2==0):
list.append(x)
x+=1
print("the even numbers in your range are:",end="")
print(len(list))
在这里,我最初可以将列表的元素声明为空,并继续在其中插入结果,其范围完全取决于用户。然后我可以检查该列表的长度,因此在用户范围之间有多少元素满足我的条件。所以在 Python 中它变得很容易!
但在 C 中,我必须首先声明数组的元素数!我可以将它声明为一个随机的大数,然后继续插入结果。然后通过检查字符\0之前有多少元素来找出最终结果(在用户范围内有多少元素满足我的条件)。但它仍然会浪费大量内存并在未使用的元素中保留垃圾,这可能会导致更大的程序出现问题!
好吧!我对malloc() 了解一些。但我也必须在这里声明尺寸!虽然我可以稍后释放内存,从而减轻更大程序的压力,但我真的想知道 C 语言中是否存在像 Python 这样的简单过程?
【问题讨论】:
-
有
realloc,您可以实现链表或其他此类“高级”数据结构。仅此而已,在标准 C 中没有什么比向量更重要的了。 -
在这种情况下,您知道
m、n,并且您将在 50% 的情况下追加,因此提前计算列表需要多大是微不足道的。为什么不只对 malloc 或数组大小这样做呢?即使您不知道要追加 50%,您仍然可以计算插入次数的上限。 -
好吧..这只是一个例子......如果我不知道其他情况下的大小,我能做什么这是我的问题!
-
@NasifImtiazOhi - 关键是“不知道大小”非常罕见,“根本不知道任何事情”的可能性更小 - 更好的解决方案是使用尽可能提供给您的信息。例如,您可以非常便宜地进行两次传递,一次计算大小,另一次在知道大小后存储它。