C# 堆栈 - Clone() 方法
C# 堆栈的 Clone() 方法用于创建堆栈的浅拷贝。
浅拷贝会创建一个新对象,该新对象引用与原始对象相同的数据,但不直接引用原始数据。此方法的复杂度为 O(n),其中 n 为计数。
需要注意的是,通用 stack<T> 类不支持 Clone() 方法。但是,system.collection 中的非泛型堆栈支持 Clone(),因为它实现了 ICloneable 接口。
语法
以下是 C# 堆栈 Clone() 方法的语法 -
public virtual object? Clone();
参数
此方法不接受任何参数。
返回值
此方法返回堆栈的浅拷贝
示例 1:创建堆栈的浅拷贝
以下是 Clone() 方法的基本示例,用于返回堆栈的顶部元素 -
using System; using System.Collections; class Program { static void Main() { Stack originalStack = new Stack(); // 将元素压入堆栈 originalStack.Push("Hello"); originalStack.Push("tutorialspoint"); originalStack.Push(50); // 克隆堆栈 Stack clonedStack = (Stack)originalStack.Clone(); // 显示克隆的堆栈元素 Console.WriteLine("Cloned Stack Elements:"); foreach (var item in clonedStack) { Console.WriteLine(item); } } }
输出
以下是输出 -
Cloned Stack Elements: 50 tutorialspoint Hello
示例 2:克隆堆栈
本例中,我们演示如何使用"System.Collections.Stack"的 Clone() 方法创建堆栈的浅拷贝 -
using System; using System.Collections; class Example { static void Main() { Stack originalStack = new Stack(); originalStack.Push("Apple"); originalStack.Push("Banana"); originalStack.Push("Cherry"); // 克隆堆栈 Stack clonedStack = (Stack)originalStack.Clone(); // 显示原始堆栈 Console.WriteLine("Original Stack Elements:"); foreach (var item in originalStack) { Console.WriteLine(item); } // 显示克隆的堆栈 Console.WriteLine("Cloned Stack Elements:"); foreach (var item in clonedStack) { Console.WriteLine(item); } // 检查两个堆栈是否具有相同的数量 Console.WriteLine("Are both stacks equal in size? " + (originalStack.Count == clonedStack.Count)); } }
输出
以下是输出 -
Original Stack Elements: Cherry Banana Apple Cloned Stack Elements: Cherry Banana Apple Are both stacks equal in size? True
示例 3:移除一个对象后进行克隆
以下示例演示了 Clone() 方法,该方法在从堆栈中移除一个对象后创建堆栈的浅拷贝 -
using System; using System.Collections; class Example { static void Main() { Stack originalStack = new Stack(); originalStack.Push("Apple"); originalStack.Push("Banana"); originalStack.Push("Cherry"); // 显示原始堆栈 // 弹出之前 Console.WriteLine("Original Stack Elements:"); foreach (var item in originalStack) { Console.WriteLine(item); } Console.WriteLine(""); // 弹出一个元素 Console.Write("Popped Element: "+ originalStack.Pop() + " "); // 克隆堆栈 Stack clonedStack = (Stack)originalStack.Clone(); // 显示克隆的堆栈 Console.WriteLine("Cloned Stack Elements:"); foreach (var item in clonedStack) { Console.WriteLine(item); } } }
输出
以下是输出 -
Original Stack Elements: Cherry Banana Apple Popped Element: Cherry Cloned Stack Elements: Banana Apple