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

csharp_stack.html