c# - new Stack<T>(curStack) 返回反向堆栈是一个错误吗?

标签 c# stack

这似乎是一个错误。考虑以下: stack order: skip skip match

……然后:
stack order: match skip skip

经过一些检查,我找到了this answer as to some 'reversal' in stack order .

期望第二个堆栈与原始堆栈的顺序相同不是合适的吗?
这是一个错误吗?

最佳答案

不,这不是错误。

堆栈将首先产生最近添加的项目。因此,当您去填充新堆栈时,您首先要添加最新的项目。由于此项目首先添加,因此它现在将成为新堆栈中“最旧”的项目,即使它是旧堆栈中的“最新”项目也是如此。

反转完全是预期的行为。

如果你有一个队列,那么写 var newQueue = new Queue<T>(oldQueue);将有效地创建一个副本。队列首先产生最旧的项目,因此旧队列中最旧的项目成为新队列中最旧的项目。列表也是如此。

您的印象似乎是存在某种复制构造函数,其中堆栈获取另一个堆栈并进行复制。这是不正确的,它只是接受 IEnumerable<T>作为它的输入。对于 ListQueue这具有获取副本的效果,因为堆栈只是具有反转项目的效果。

关于c# - new Stack<T>(curStack) 返回反向堆栈是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766024/

相关文章:

c# - 如何使用 ReactiveUI 从 CommandParameter 中确定 "canExecute"?

c# - 存储库类未在 ServiceStack 中处置

c# - 无法在 C# 中将类型 void 隐式转换为对象错误

c++ - FreeRTOS STM32 链接器堆栈大小与任务堆栈大小

c# - 来电显示检测 : Doesnt work with some phones

c# - ASP.NET Core 2.0 webApp 在发布到 iis 后显示 'view Index was not found...'

c++ - 奇怪的堆栈/字符串行为

c - 平衡括号,堆栈不迭代到文本文件中的其他行

c - 一种破解 C 函数调用的快速方法

c++ - 合并和快速排序 - 堆栈重载