Stack クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
シンプルな後入れ先出し (LIFO) の非ジェネリック オブジェクト コレクションを表します。
public ref class Stack : System::Collections::ICollection
public ref class Stack : ICloneable, System::Collections::ICollection
public class Stack : System.Collections.ICollection
public class Stack : ICloneable, System.Collections.ICollection
[System.Serializable]
public class Stack : ICloneable, System.Collections.ICollection
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class Stack : ICloneable, System.Collections.ICollection
type Stack = class
interface ICollection
interface IEnumerable
type Stack = class
interface ICollection
interface IEnumerable
interface ICloneable
[<System.Serializable>]
type Stack = class
interface ICollection
interface IEnumerable
interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Stack = class
interface ICollection
interface IEnumerable
interface ICloneable
Public Class Stack
Implements ICollection
Public Class Stack
Implements ICloneable, ICollection
- 継承
-
Stack
- 属性
- 実装
例
次の例は、スタックに値を作成して追加する方法とその値を表示する方法を示しています。
using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{
// Creates and initializes a new Stack.
Stack^ myStack = gcnew 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 );
}
void PrintValues( IEnumerable^ myCollection )
{
IEnumerator^ myEnum = myCollection->GetEnumerator();
while ( myEnum->MoveNext() )
{
Object^ obj = safe_cast<Object^>(myEnum->Current);
Console::Write( " {0}", obj );
}
Console::WriteLine();
}
/*
This code produces the following output.
myStack
Count: 3
Values: ! World Hello
*/
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 ) {
foreach ( Object obj in myCollection )
Console.Write( " {0}", obj );
Console.WriteLine();
}
}
/*
This code produces the following output.
myStack
Count: 3
Values: ! World Hello
*/
Imports System.Collections
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 obj As [Object]
For Each obj In myCollection
Console.Write(" {0}", obj)
Next obj
Console.WriteLine()
End Sub
End Class
' This code produces the following output.
'
' myStack
' Count: 3
' Values: ! World Hello
注釈
Stackの容量は、Stackが保持できる要素の数です。 要素が に Stack追加されると、再割り当てによって必要に応じて容量が自動的に増加します。
重要
新しい開発には クラスを Stack
使用しないことをお勧めします。 代わりに、ジェネリック System.Collections.Generic.Stack<T> クラスを使用することをお勧めします。 詳細については、「GitHub で 非ジェネリック コレクションを使用しないでください 」を参照してください。
がスタックの容量より小さい場合 Count 、 Push は 操作です O(1)
。 新しい要素に対応するために容量を増やす必要がある場合は、 Push が Count操作n
になりますO(n)
。 Pop は操作です O(1)
。
Stack は null
有効な値として受け取り、重複する要素を許可します。
コンストラクター
Stack() |
空で、既定の初期量を備えた、Stack クラスの新しいインスタンスを初期化します。 |
Stack(ICollection) |
指定したコレクションからコピーした要素を格納し、コピーされる要素の数と同じ初期量を備えた、Stack クラスの新しいインスタンスを初期化します。 |
Stack(Int32) |
空で、指定した初期量または既定の初期量のうち大きい方の初期量を備えた、Stack クラスの新しいインスタンスを初期化します。 |
プロパティ
Count |
Stack に格納されている要素の数を取得します。 |
IsSynchronized |
Stack へのアクセスが同期されている (スレッド セーフである) かどうかを示す値を取得します。 |
SyncRoot |
Stack へのアクセスを同期するために使用できるオブジェクトを取得します。 |
メソッド
Clear() |
Stack からすべてのオブジェクトを削除します。 |
Clone() |
Stack の簡易コピーを作成します。 |
Contains(Object) |
ある要素が Stack 内に存在するかどうかを判断します。 |
CopyTo(Array, Int32) | |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetEnumerator() |
IEnumerator の Stack を返します。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
Peek() |
Stack の先頭にあるオブジェクトを削除せずに返します。 |
Pop() |
Stack の先頭にあるオブジェクトを削除し、返します。 |
Push(Object) |
Stack の先頭にオブジェクトを挿入します。 |
Synchronized(Stack) |
Stack 用の同期された (スレッド セーフな) ラッパーを返します。 |
ToArray() |
Stack を新しい配列にコピーします。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
拡張メソッド
Cast<TResult>(IEnumerable) |
IEnumerable の要素を、指定した型にキャストします。 |
OfType<TResult>(IEnumerable) |
指定された型に基づいて IEnumerable の要素をフィルター処理します。 |
AsParallel(IEnumerable) |
クエリの並列化を有効にします。 |
AsQueryable(IEnumerable) |
IEnumerable を IQueryable に変換します。 |
適用対象
スレッド セーフ
パブリック静的 (Visual Basic ではShared
) なこの型のメンバーはスレッド セーフです インスタンス メンバーの場合は、スレッド セーフであるとは限りません。
のスレッド セーフを保証するには、 Stackメソッドによって返されるラッパーを使用して、すべての操作を実行する Synchronized(Stack) 必要があります。
コレクションの列挙処理は、本質的にスレッドセーフな処理ではありません。 コレクションが同期されていても、他のスレッドがコレクションを変更する場合があり、このときは列挙子から例外がスローされます。 列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチします。
こちらもご覧ください
.NET