stack.clear() 更快还是弹出每个元素更快?

stack.clear() faster or popping each element faster?

同样,要查找堆栈中元素的数量,stack.size() 调用是否比弹出每个元素并计数更快?我当然不需要堆栈了。

答案取决于 Stack class 的实现,但逻辑上弹出 n 次不会比获取 count 和调用 clear 快: 这是一个 O(n) 算法。

另一方面,获取 count 可能会更快,因为如果 Stack 存储它拥有的项目数,它可以在一次访问中完成,使其成为 O( 1)*算法。同理,一次清除全部内容可以实现为O(1)。

* O(1) 是 "does not depend on the number of elements on the stack".

的一种奇特表达方式

Stack继承自VectorVector是定义size()方法的class,不是Stack。 Vector还有一个保护字段elementCount,就是Vector中有效元素的个数。我假设 size() 方法只是 returns 这个变量,使得调用 size() 比弹出和计数要快得多。另外,Vector 不需要做 pops 来计算元素,因为 popping 不是 Vector 的特性。

您可以编写两个函数并使用这些函数测试您的问题,您将了解并找出您的问题。编写一个弹出每个元素的函数,将其推入另一个堆栈,完成后将其全部推回原始数组(您希望在调用 .size() 时保持堆栈的完整性,size 调用不应修改您的堆栈).另一个用stack.size()。然后调用主函数中的每个函数,并在两个函数调用之前和之后使用类似 time() 的函数。您会看到两个函数之间的时间差异。试试吧!

当然这取决于其他答案中提到的堆栈的实现。看看stack接口的文档,里面应该有。