C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のStack.Pop()メソッドとは?使い方とサンプルコードを徹底解説

C#のStack.Pop()メソッドは、スタック(Stack)の最上位にあるオブジェクトを削除し、その値を返すためのメソッドです。スタックはLIFO(Last In First Out:後入れ先出し)方式のデータ構造であり、Pop()を呼び出すたびに、最後に追加された要素が取り出されると同時にスタックから削除されます。

なお、要素を削除せずに先頭の値だけを確認したい場合はPeek()メソッドを使用します。また、空のスタックに対してPop()を呼び出すとInvalidOperationExceptionがスローされるため、実行前にCountプロパティで要素数をチェックしておくと安全です。

構文

構文は以下の通りです。

public virtual object Pop ();

例1:PushとPopの基本的な使い方

まずは基本的な使用例を見てみましょう。Push()で複数の要素を追加した後、Peek()で先頭を確認し、Pop()で要素を取り出しています。

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      Stack stack = new Stack();
      stack.Push("Inspiron");
      stack.Push("Alienware");
      stack.Push("Projectors");
      stack.Push("Monitors");
      stack.Push("XPS");
      stack.Push("Laptop");
      stack.Push("Notebook");

      Console.WriteLine("スタックの要素...");
      foreach(string val in stack) {
         Console.WriteLine(val);
      }
      Console.WriteLine("要素数 = " + stack.Count);
      Console.WriteLine("先頭の要素 = " + stack.Peek());

      stack.Push("Ultrabook");
      stack.Push("Cameras");
      stack.Push("Keyboards");

      Console.WriteLine("\nスタックの要素...更新後");
      foreach(string val in stack) {
         Console.WriteLine(val);
      }
      Console.WriteLine("先頭の要素 = " + stack.Peek());
      Console.WriteLine("\n要素数(更新後) = " + stack.Count);

      Console.WriteLine("\n先頭の要素を削除して返す = " + stack.Pop());
      Console.Write("要素数(更新後) = " + stack.Count);

      Console.WriteLine("\nスタックの要素...更新後");
      foreach(string val in stack) {
         Console.WriteLine(val);
      }
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

スタックの要素...
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
要素数 = 7
先頭の要素 = Notebook
スタックの要素...更新後
Keyboards
Cameras
Ultrabook
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
先頭の要素 = Keyboards
要素数(更新後) = 10
先頭の要素を削除して返す = Keyboards
要素数(更新後) = 9
スタックの要素...更新後
Cameras
Ultrabook
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron

この結果から、Pop()を呼び出すことで「Keyboards」が返され、同時にスタックから削除され、要素数が10から9に減っていることが確認できます。

例2:Cloneしたスタックに対するPopの動作

次に、Clone()メソッドでコピーした別のスタックに対してPop()を実行する例を見てみましょう。

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      Stack stack = new Stack();
      stack.Push("Inspiron");
      stack.Push("Alienware");
      stack.Push("Projectors");
      stack.Push("Monitors");
      stack.Push("XPS");
      stack.Push("Laptop");
      stack.Push("Notebook");

      Console.WriteLine("スタックの要素...");
      foreach(string val in stack) {
         Console.WriteLine(val);
      }
      Console.WriteLine("要素数 = " + stack.Count);
      Console.WriteLine("Speakersはスタックに含まれるか? = " + stack.Contains("Speakers"));

      stack.Push("Headphone");
      stack.Push("Keyboard");
      stack.Push("Earphone");

      Console.WriteLine("\nスタックの要素...更新後");
      foreach(string val in stack) {
         Console.WriteLine(val);
      }
      Console.WriteLine("要素数(更新後) = " + stack.Count);
      Console.WriteLine("Alienwareはスタックに含まれるか? = " + stack.Contains("Alienware"));

      Stack stack2 = (Stack)stack.Clone();
      Console.WriteLine("\nスタックの要素...クローン後");
      foreach(string val in stack2) {
         Console.WriteLine(val);
      }
      Console.WriteLine("stack2の要素数 = " + stack2.Count);
      Console.WriteLine("stack2の先頭 = " + stack2.Peek());

      Console.WriteLine("\nstack2の先頭の要素を削除して返す = " + stack2.Pop());
      Console.WriteLine("stack2の要素数 = " + stack2.Count);
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

スタックの要素...
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
要素数 = 7
Speakersはスタックに含まれるか? = False
スタックの要素...更新後
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
要素数(更新後) = 10
Alienwareはスタックに含まれるか? = True
スタックの要素...クローン後
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
stack2の要素数 = 10
stack2の先頭 = Earphone
stack2の先頭の要素を削除して返す = Earphone
stack2の要素数 = 9

ポイントまとめ

  • Pop():先頭の要素を返して削除する。要素数が1つ減る。
  • Peek():先頭の要素を削除せずに参照するだけ。要素数は変わらない。
  • 空のスタックに対してPop()やPeek()を呼び出すとInvalidOperationExceptionが発生するため、事前にCountプロパティで確認するのが推奨される。
  • 非ジェネリックなStackクラスではobject型として要素が返されるため、実際の開発では型安全なStack<T>(System.Collections.Generic名前空間)を使うのが一般的です。
  1. C#のConsole.SetBufferSize()メソッドの使い方を徹底解説

    C#におけるConsole.SetBufferSize()メソッドは、コンソール画面のバッファ領域(スクリーンバッファ)の幅と高さを指定した値に設定するために使用されるメソッドです。コンソールアプリケーションで表示領域をカスタマイズしたい場合に活用できます。構文Console.SetBufferSize()メソッドの構文は以下の通りです。public static void SetBufferSize (int width, int height);各パラメータの意味は次のようになっています。width: バッファ領域の幅(列数)を指定します。height: バッファ領域の高さ(行数)を指定し

  2. C#のConsole.ResetColor()メソッドの使い方を解説

    概要C#のConsole.ResetColor()メソッドは、コンソールの前景色(文字色)と背景色を、既定の配色に戻すために使用されます。プログラム内で一時的に文字色や背景色を変更した後、元の状態へ復元したい場合に非常に便利です。構文ResetColor()メソッドの構文は以下のとおりです。public static void ResetColor ();このメソッドは引数を受け取らず、戻り値もありません。また、staticメソッドであるため、インスタンスを生成することなく、Consoleクラスから直接呼び出すことができます。使用例それでは、C#でConsole.ResetColor()メソッ