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
继承自Vector
,Vector
是定义size()
方法的class,不是Stack。 Vector
还有一个保护字段elementCount
,就是Vector
中有效元素的个数。我假设 size()
方法只是 returns 这个变量,使得调用 size()
比弹出和计数要快得多。另外,Vector 不需要做 pops 来计算元素,因为 popping 不是 Vector 的特性。
您可以编写两个函数并使用这些函数测试您的问题,您将了解并找出您的问题。编写一个弹出每个元素的函数,将其推入另一个堆栈,完成后将其全部推回原始数组(您希望在调用 .size()
时保持堆栈的完整性,size 调用不应修改您的堆栈).另一个用stack.size()
。然后调用主函数中的每个函数,并在两个函数调用之前和之后使用类似 time() 的函数。您会看到两个函数之间的时间差异。试试吧!
当然这取决于其他答案中提到的堆栈的实现。看看stack接口的文档,里面应该有。
同样,要查找堆栈中元素的数量,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
继承自Vector
,Vector
是定义size()
方法的class,不是Stack。 Vector
还有一个保护字段elementCount
,就是Vector
中有效元素的个数。我假设 size()
方法只是 returns 这个变量,使得调用 size()
比弹出和计数要快得多。另外,Vector 不需要做 pops 来计算元素,因为 popping 不是 Vector 的特性。
您可以编写两个函数并使用这些函数测试您的问题,您将了解并找出您的问题。编写一个弹出每个元素的函数,将其推入另一个堆栈,完成后将其全部推回原始数组(您希望在调用 .size()
时保持堆栈的完整性,size 调用不应修改您的堆栈).另一个用stack.size()
。然后调用主函数中的每个函数,并在两个函数调用之前和之后使用类似 time() 的函数。您会看到两个函数之间的时间差异。试试吧!
当然这取决于其他答案中提到的堆栈的实现。看看stack接口的文档,里面应该有。