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) 操作になります。ここで、 n は Count です。 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 内)