Stack クラス

オブジェクトの単純な後入れ先出しコレクションを表します。

この型のすべてのメンバの一覧については、Stack メンバ を参照してください。

System.Object
   System.Collections.Stack

<Serializable>
Public Class Stack   Implements ICollection, IEnumerable, ICloneable
[C#]
[Serializable]
public class Stack : ICollection, IEnumerable, ICloneable
[C++]
[Serializable]
public __gc class Stack : public ICollection, IEnumerable,   ICloneable
[JScript]
public
   Serializable
class Stack implements ICollection, IEnumerable, ICloneable

スレッドセーフ

この型の public static (Visual Basic では Shared) メンバは、マルチスレッド操作に対して安全です。インスタンス メンバがスレッド セーフになるかどうかは保証されていません。

Stack を確実にスレッド セーフにするためには、すべての操作を Synchronized メソッドから返されるラッパー経由で実行する必要があります。

コレクションの列挙処理は、本質的にはスレッド セーフな処理ではありません。コレクションが同期されている場合でも、他のスレッドがそのコレクションを変更する可能性はあり、そのような状況が発生すると列挙子は例外をスローします。列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチする方法のいずれかを実行できます。

解説

Stack は、循環バッファとして実装されます。

Count がスタックの容量よりも小さい場合、 Push は O(1) 操作になります。新しい要素を格納するために容量を増やす必要がある場合、 Push は O(n) 操作になります。ここで、 nCount です。 Pop は O(1) 操作です。

Stack は、 null 参照 (Visual Basic では Nothing) を有効な値として受け取り、要素の重複を許可します。

使用例

[Visual Basic, C#, C++] Stack を作成して値を追加する方法と、その値を出力する方法の例を次に示します。

 
Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesStack    
    
    Public Shared Sub Main()
    
        ' Creates and initializes a new Stack.
        Dim myStack As New Stack()
        myStack.Push("Hello")
        myStack.Push("World")
        myStack.Push("!")
        
        ' Displays the properties and values of the Stack.
        Console.WriteLine("myStack")
        Console.WriteLine(ControlChars.Tab & "Count:    {0}", myStack.Count)
        Console.Write(ControlChars.Tab & "Values:")
        PrintValues(myStack)
    End Sub
    
    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myCollection.GetEnumerator()
        While myEnumerator.MoveNext()
            Console.Write(ControlChars.Tab & "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' myStack
'     Count:     3
'     Values:    !    World    Hello

[C#] 
using System;
using System.Collections;
public class SamplesStack  {

   public static void Main()  {

      // Creates and initializes a new Stack.
      Stack myStack = new Stack();
      myStack.Push("Hello");
      myStack.Push("World");
      myStack.Push("!");

      // Displays the properties and values of the Stack.
      Console.WriteLine( "myStack" );
      Console.WriteLine( "\tCount:    {0}", myStack.Count );
      Console.Write( "\tValues:" );
      PrintValues( myStack );
   }


   public static void PrintValues( IEnumerable myCollection )  {
      System.Collections.IEnumerator myEnumerator = myCollection.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.Write( "\t{0}", myEnumerator.Current );
      Console.WriteLine();
   }
}
/* 
This code produces the following output.

myStack
    Count:    3
    Values:    !    World    Hello
*/ 

[C++] 
#using <mscorlib.dll>
#using <system.dll>

using namespace System;
using namespace System::Collections;

public __gc class SamplesStack  {
public:
   static void PrintValues(IEnumerable __gc *myCollection)  {
      System::Collections::IEnumerator __gc *myEnumerator = myCollection->GetEnumerator();
      while (myEnumerator->MoveNext())
         Console::Write(S"\t{0}", myEnumerator->Current);
      Console::WriteLine();
   }
};

int main()  {

   // Creates and initializes a new Stack.
   Stack __gc *myStack = new Stack();
   myStack->Push(S"Hello");
   myStack->Push(S"World");
   myStack->Push(S"!");

   // Displays the properties and values of the Stack.
   Console::WriteLine(S"myStack");
   Console::WriteLine(S"\tCount:    {0}", __box(myStack->Count));
   Console::Write(S"\tValues:");
   SamplesStack::PrintValues(myStack);
}
/* 
This code produces the following output.

myStack
        Count:    3
        Values: !       World   Hello
*/ 

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Collections

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

Stack メンバ | System.Collections 名前空間