Stack<T> Stack<T> Stack<T> Stack<T> Class

定義

指定した同じ型のインスタンスの、後入れ先出し (LIFO) の可変サイズのコレクションを表します。Represents a variable size last-in-first-out (LIFO) collection of instances of the same specified type.

generic <typename T>
public ref class Stack : System::Collections::Generic::IEnumerable<T>, System::Collections::Generic::IReadOnlyCollection<T>, System::Collections::ICollection
[System.Runtime.InteropServices.ComVisible(false)]
[System.Serializable]
public class Stack<T> : System.Collections.Generic.IEnumerable<T>, System.Collections.Generic.IReadOnlyCollection<T>, System.Collections.ICollection
type Stack<'T> = class
    interface seq<'T>
    interface ICollection
    interface IReadOnlyCollection<'T>
    interface IEnumerable
Public Class Stack(Of T)
Implements ICollection, IEnumerable(Of T), IReadOnlyCollection(Of T)

型パラメーター

T

スタック内の要素の型を指定します。Specifies the type of elements in the stack.

継承
Stack<T>Stack<T>Stack<T>Stack<T>
属性
実装

次のコード例をいくつかの方法を示します、Stack<T>ジェネリック クラスです。The following code example demonstrates several methods of the Stack<T> generic class. コード例は、既定の容量を持つ文字列のスタックを作成し、使用して、 Push 5 つの文字列をスタックにプッシュするメソッド。The code example creates a stack of strings with default capacity and uses the Push method to push five strings onto the stack. スタックの要素が列挙されますが、スタックの状態は変化しません。The elements of the stack are enumerated, which does not change the state of the stack. Popメソッドを使用して、最初の文字列、スタックからポップします。The Pop method is used to pop the first string off the stack. Peekメソッドを使用して、スタックの次の項目を確認し、Popポップしてメソッドを使用します。The Peek method is used to look at the next item on the stack, and then the Pop method is used to pop it off.

ToArrayメソッドは、配列を作成して、スタック要素のコピーを使用し、配列に渡されます、Stack<T>を受け取るコンス トラクター IEnumerable<T>、逆に、要素の順序でスタックのコピーを作成します。The ToArray method is used to create an array and copy the stack elements to it, then the array is passed to the Stack<T> constructor that takes IEnumerable<T>, creating a copy of the stack with the order of the elements reversed. コピーの要素が表示されます。The elements of the copy are displayed.

配列 2 回、スタックのサイズを作成、およびCopyToメソッドを使用して、配列の真中で始まる配列の要素をコピーします。An array twice the size of the stack is created, and the CopyTo method is used to copy the array elements beginning at the middle of the array. Stack<T>は元に戻すの要素の順序でスタックのコピーを作成するコンス トラクターをもう一度使用されます。 そのため、3 つの null 要素が最後には。The Stack<T> constructor is used again to create a copy of the stack with the order of elements reversed; thus, the three null elements are at the end.

Contains 「4」文字列がその後が、スタックの最初のコピーのことを示すメソッドを使用、Clearメソッドは、コピーをクリアし、Countプロパティがスタックが空であることを示しています。The Contains method is used to show that the string "four" is in the first copy of the stack, after which the Clear method clears the copy and the Count property shows that the stack is empty.

using System;
using System.Collections.Generic;

class Example
{
    public static void Main()
    {
        Stack<string> numbers = new Stack<string>();
        numbers.Push("one");
        numbers.Push("two");
        numbers.Push("three");
        numbers.Push("four");
        numbers.Push("five");

        // A stack can be enumerated without disturbing its contents.
        foreach( string number in numbers )
        {
            Console.WriteLine(number);
        }

        Console.WriteLine("\nPopping '{0}'", numbers.Pop());
        Console.WriteLine("Peek at next item to destack: {0}", 
            numbers.Peek());
        Console.WriteLine("Popping '{0}'", numbers.Pop());

        // Create a copy of the stack, using the ToArray method and the
        // constructor that accepts an IEnumerable<T>.
        Stack<string> stack2 = new Stack<string>(numbers.ToArray());

        Console.WriteLine("\nContents of the first copy:");
        foreach( string number in stack2 )
        {
            Console.WriteLine(number);
        }
        
        // Create an array twice the size of the stack and copy the
        // elements of the stack, starting at the middle of the 
        // array. 
        string[] array2 = new string[numbers.Count * 2];
        numbers.CopyTo(array2, numbers.Count);
        
        // Create a second stack, using the constructor that accepts an
        // IEnumerable(Of T).
        Stack<string> stack3 = new Stack<string>(array2);

        Console.WriteLine("\nContents of the second copy, with duplicates and nulls:");
        foreach( string number in stack3 )
        {
            Console.WriteLine(number);
        }

        Console.WriteLine("\nstack2.Contains(\"four\") = {0}", 
            stack2.Contains("four"));

        Console.WriteLine("\nstack2.Clear()");
        stack2.Clear();
        Console.WriteLine("\nstack2.Count = {0}", stack2.Count);
    }
}

/* This code example produces the following output:

five
four
three
two
one

Popping 'five'
Peek at next item to destack: four
Popping 'four'

Contents of the first copy:
one
two
three

Contents of the second copy, with duplicates and nulls:
one
two
three




stack2.Contains("four") = False

stack2.Clear()

stack2.Count = 0
 */
Imports System
Imports System.Collections.Generic

Module Example

    Sub Main

        Dim numbers As New Stack(Of String)
        numbers.Push("one")
        numbers.Push("two")
        numbers.Push("three")
        numbers.Push("four")
        numbers.Push("five")

        ' A stack can be enumerated without disturbing its contents.
        For Each number As String In numbers
            Console.WriteLine(number)
        Next

        Console.WriteLine(vbLf & "Popping '{0}'", numbers.Pop())
        Console.WriteLine("Peek at next item to pop: {0}", _
            numbers.Peek())    
        Console.WriteLine("Popping '{0}'", numbers.Pop())

        ' Create another stack, using the ToArray method and the
        ' constructor that accepts an IEnumerable(Of T). Note that
        ' the order of items on the new stack is reversed.
        Dim stack2 As New Stack(Of String)(numbers.ToArray())

        Console.WriteLine(vbLf & "Contents of the first copy:")
        For Each number As String In stack2
            Console.WriteLine(number)
        Next
        
        ' Create an array twice the size of the stack, compensating
        ' for the fact that Visual Basic allocates an extra array 
        ' element. Copy the elements of the stack, starting at the
        ' middle of the array. 
        Dim array2((numbers.Count * 2) - 1) As String
        numbers.CopyTo(array2, numbers.Count)
        
        ' Create a second stack, using the constructor that accepts an
        ' IEnumerable(Of T). The elements are reversed, with the null
        ' elements appearing at the end of the stack when enumerated.
        Dim stack3 As New Stack(Of String)(array2)

        Console.WriteLine(vbLf & _
            "Contents of the second copy, with duplicates and nulls:")
        For Each number As String In stack3
            Console.WriteLine(number)
        Next

        Console.WriteLine(vbLf & "stack2.Contains(""four"") = {0}", _
            stack2.Contains("four"))

        Console.WriteLine(vbLf & "stack2.Clear()")
        stack2.Clear()
        Console.WriteLine(vbLf & "stack2.Count = {0}", _
            stack2.Count)
    End Sub
End Module

' This code example produces the following output:
'
'five
'four
'three
'two
'one
'
'Popping 'five'
'Peek at next item to pop: four
'Popping 'four'
'
'Contents of the first copy:
'one
'two
'three
'
'Contents of the second copy, with duplicates and nulls:
'one
'two
'three
'
'
'
'
'stack2.Contains("four") = False
'
'stack2.Clear()
'
'stack2.Count = 0

注釈

Stack<T> 配列として実装されます。Stack<T> is implemented as an array.

スタックやキューは便利な情報の一時的なストレージが必要な場合つまり、可能性がある場合の値を取得後に要素を破棄します。Stacks and queues are useful when you need temporary storage for information; that is, when you might want to discard an element after retrieving its value. 使用Queue<T>かどうかは、コレクションに保存されていることと同じ順序で情報にアクセスする必要があります。Use Queue<T> if you need to access the information in the same order that it is stored in the collection. 使用System.Collections.Generic.Stack<T>逆の順序で情報にアクセスする必要がある場合。Use System.Collections.Generic.Stack<T> if you need to access the information in reverse order.

使用して、System.Collections.Concurrent.ConcurrentStack<T>System.Collections.Concurrent.ConcurrentQueue<T>型の場合、同時に複数のスレッドからコレクションにアクセスする必要があります。Use the System.Collections.Concurrent.ConcurrentStack<T> and System.Collections.Concurrent.ConcurrentQueue<T> types when you need to access the collection from multiple threads concurrently.

一般的な用途System.Collections.Generic.Stack<T>他のプロシージャの呼び出し中に変数の状態を維持しています。A common use for System.Collections.Generic.Stack<T> is to preserve variable states during calls to other procedures.

次の 3 つの主な操作を実行できる、System.Collections.Generic.Stack<T>とその要素。Three main operations can be performed on a System.Collections.Generic.Stack<T> and its elements:

  • Push 上部にある要素を挿入、Stackします。Push inserts an element at the top of the Stack.

  • Pop 先頭から要素を削除、Stack<T>します。Pop removes an element from the top of the Stack<T>.

  • Peek 上部にある要素を返します、Stack<T>からは削除されませんが、Stack<T>します。Peek returns an element that is at the top of the Stack<T> but does not remove it from the Stack<T>.

Stack<T>の容量は、Stack<T>が保持できる要素の数です。The capacity of a Stack<T> is the number of elements the Stack<T> can hold. 要素が追加される、Stack<T>容量は自動的に増加内部配列を再割り当てすることで必要とします。As elements are added to a Stack<T>, the capacity is automatically increased as required by reallocating the internal array. 呼び出すことによって、容量を削減できるTrimExcessします。The capacity can be decreased by calling TrimExcess.

場合Countがスタックの容量より小さいPushは o (1) 操作です。If Count is less than the capacity of the stack, Push is an O(1) operation. 容量は、新しい要素を格納するために必要がある場合PushO になります (n) 操作、nCountします。If the capacity needs to be increased to accommodate the new element, Push becomes an O(n) operation, where n is Count. Pop o (1) 操作です。Pop is an O(1) operation.

Stack<T> 受け入れるnull参照の有効な値の型し、重複する要素を使用します。Stack<T> accepts null as a valid value for reference types and allows duplicate elements.

コンストラクター

Stack<T>() Stack<T>() Stack<T>() Stack<T>()

空で、既定の初期量を備えた、Stack<T> クラスの新しいインスタンスを初期化します。Initializes a new instance of the Stack<T> class that is empty and has the default initial capacity.

Stack<T>(IEnumerable<T>) Stack<T>(IEnumerable<T>) Stack<T>(IEnumerable<T>) Stack<T>(IEnumerable<T>)

指定したコレクションからコピーした要素を格納し、コピーされる要素の数を格納できるだけの容量を備えた、Stack<T> クラスの新しいインスタンスを初期化します。Initializes a new instance of the Stack<T> class that contains elements copied from the specified collection and has sufficient capacity to accommodate the number of elements copied.

Stack<T>(Int32) Stack<T>(Int32) Stack<T>(Int32) Stack<T>(Int32)

空で、指定した初期量または既定の初期量のうち大きい方の初期量を備えた、Stack<T> クラスの新しいインスタンスを初期化します。Initializes a new instance of the Stack<T> class that is empty and has the specified initial capacity or the default initial capacity, whichever is greater.

プロパティ

Count Count Count Count

Stack<T> に格納されている要素の数を取得します。Gets the number of elements contained in the Stack<T>.

メソッド

Clear() Clear() Clear() Clear()

Stack<T> からすべてのオブジェクトを削除します。Removes all objects from the Stack<T>.

Contains(T) Contains(T) Contains(T) Contains(T)

ある要素が Stack<T> 内に存在するかどうかを判断します。Determines whether an element is in the Stack<T>.

CopyTo(T[], Int32) CopyTo(T[], Int32) CopyTo(T[], Int32) CopyTo(T[], Int32)

既存の 1 次元の Stack<T>Array をコピーします。コピー操作は、配列の指定したインデックスから始まります。Copies the Stack<T> to an existing one-dimensional Array, starting at the specified array index.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetEnumerator() GetEnumerator() GetEnumerator() GetEnumerator()

Stack<T> の列挙子を返します。Returns an enumerator for the Stack<T>.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
Peek() Peek() Peek() Peek()

Stack<T> の先頭にあるオブジェクトを削除せずに返します。Returns the object at the top of the Stack<T> without removing it.

Pop() Pop() Pop() Pop()

Stack<T> の先頭にあるオブジェクトを削除し、返します。Removes and returns the object at the top of the Stack<T>.

Push(T) Push(T) Push(T) Push(T)

Stack<T> の先頭にオブジェクトを挿入します。Inserts an object at the top of the Stack<T>.

ToArray() ToArray() ToArray() ToArray()

Stack<T> を新しい配列にコピーします。Copies the Stack<T> to a new array.

ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)
TrimExcess() TrimExcess() TrimExcess() TrimExcess()

Stack<T> 内にある実際の要素数が現在の容量の 90% 未満の場合は、容量をその数に設定します。Sets the capacity to the actual number of elements in the Stack<T>, if that number is less than 90 percent of current capacity.

TryPeek(T) TryPeek(T) TryPeek(T) TryPeek(T)
TryPop(T) TryPop(T) TryPop(T) TryPop(T)

明示的なインターフェイスの実装

ICollection.CopyTo(Array, Int32) ICollection.CopyTo(Array, Int32) ICollection.CopyTo(Array, Int32) ICollection.CopyTo(Array, Int32)

ICollection の要素を Array にコピーします。Array の特定のインデックスからコピーが開始されます。Copies the elements of the ICollection to an Array, starting at a particular Array index.

ICollection.IsSynchronized ICollection.IsSynchronized ICollection.IsSynchronized ICollection.IsSynchronized

ICollection へのアクセスが同期されている (スレッド セーフである) かどうかを示す値を取得します。Gets a value indicating whether access to the ICollection is synchronized (thread safe).

ICollection.SyncRoot ICollection.SyncRoot ICollection.SyncRoot ICollection.SyncRoot

ICollection へのアクセスを同期するために使用できるオブジェクトを取得します。Gets an object that can be used to synchronize access to the ICollection.

IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator()

コレクションを反復処理する列挙子を返します。Returns an enumerator that iterates through a collection.

IEnumerable<T>.GetEnumerator() IEnumerable<T>.GetEnumerator() IEnumerable<T>.GetEnumerator() IEnumerable<T>.GetEnumerator()

コレクションを反復処理する列挙子を返します。Returns an enumerator that iterates through the collection.

拡張メソッド

CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>)

指定した入力 DataTable オブジェクトに応じて (ジェネリック パラメーター TDataRow)、IEnumerable<T> オブジェクトのコピーを格納する DataRow を返します。Returns a DataTable that contains copies of the DataRow objects, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption)

指定した入力 DataRow オブジェクトに応じて (ジェネリック パラメーター TDataTable)、指定した IEnumerable<T>DataRow オブジェクトをコピーします。Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler)

指定した入力 DataRow オブジェクトに応じて (ジェネリック パラメーター TDataTable)、指定した IEnumerable<T>DataRow オブジェクトをコピーします。Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable)

IEnumerable の要素を、指定した型にキャストします。Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable)

指定された型に基づいて IEnumerable の要素をフィルター処理します。Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable)

クエリの並列化を有効にします。Enables parallelization of a query.

AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable)

IEnumerableIQueryable に変換します。Converts an IEnumerable to an IQueryable.

Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>)

ソース コレクション内のすべてのノードの先祖が格納された、要素のコレクションを返します。Returns a collection of elements that contains the ancestors of every node in the source collection.

Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName)

ソース コレクション内のすべてのノードの先祖が格納され、フィルター処理された要素のコレクションを返します。Returns a filtered collection of elements that contains the ancestors of every node in the source collection. 一致する XName を持つ要素のみがコレクションに含められます。Only elements that have a matching XName are included in the collection.

DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>)

ソース コレクション内のすべてのドキュメントおよび要素の子孫ノードのコレクションを返します。Returns a collection of the descendant nodes of every document and element in the source collection.

Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>)

ソース コレクション内のすべての要素とドキュメントの子孫要素が格納された要素のコレクションを返します。Returns a collection of elements that contains the descendant elements of every element and document in the source collection.

Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName)

ソース コレクション内のすべての要素とドキュメントの子孫要素が格納され、フィルター処理された要素のコレクションを返します。Returns a filtered collection of elements that contains the descendant elements of every element and document in the source collection. 一致する XName を持つ要素のみがコレクションに含められます。Only elements that have a matching XName are included in the collection.

Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>)

ソース コレクション内のすべての要素およびドキュメントの子要素のコレクションを返します。Returns a collection of the child elements of every element and document in the source collection.

Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName)

ソース コレクション内のすべての要素およびドキュメントの、フィルター処理された子要素のコレクションを返します。Returns a filtered collection of the child elements of every element and document in the source collection. 一致する XName を持つ要素のみがコレクションに含められます。Only elements that have a matching XName are included in the collection.

InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>)

ソース コレクション内のすべてのノードがドキュメント順に並べ替えて格納された、ノードのコレクションを返します。Returns a collection of nodes that contains all nodes in the source collection, sorted in document order.

Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>)

ソース コレクション内のすべてのドキュメントおよび要素の子ノードのコレクションを返します。Returns a collection of the child nodes of every document and element in the source collection.

Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>)

ソース コレクション内の親ノードからすべてのノードを削除します。Removes every node in the source collection from its parent node.

適用対象

スレッド セーフ

パブリック静的 (Visual Basic ではShared) なこの型のメンバーはスレッド セーフですPublic static (Shared in Visual Basic) members of this type are thread safe. インスタンス メンバーの場合は、スレッド セーフであるとは限りません。Any instance members are not guaranteed to be thread safe.

AStack<T>コレクションが変更されない限り、複数のリーダーを同時にサポートできます。A Stack<T> can support multiple readers concurrently, as long as the collection is not modified. それでも、コレクションの列挙は、本質的には、スレッド セーフなプロシージャでは。Even so, enumerating through a collection is intrinsically not a thread-safe procedure. 列挙処理でスレッド セーフを確保するには、列挙処理が終わるまでコレクションをロックできます。To guarantee thread safety during enumeration, you can lock the collection during the entire enumeration. コレクションに対し複数のスレッドがアクセスして読み取りや書き込みを行うことができるようにするには、独自に同期化を実装する必要があります。To allow the collection to be accessed by multiple threads for reading and writing, you must implement your own synchronization.

こちらもご覧ください