Stack Stack Stack Stack Class


後入れ先出し (LIFO) のオブジェクトの簡単な非ジェネリック コレクションを表します。Represents a simple last-in-first-out (LIFO) non-generic collection of objects.

public ref class Stack : ICloneable, System::Collections::ICollection
public class Stack : ICloneable, System.Collections.ICollection
type Stack = class
    interface ICollection
    interface ICloneable
    interface IEnumerable
Public Class Stack
Implements ICloneable, ICollection

次の例を作成し、値を追加する方法を示しています、Stackとその値を表示する方法。The following example shows how to create and add values to a Stack and how to display its values.

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 );


 This code produces the following output.
     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();

      // 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 );


This code produces the following output.

    Count:    3
    Values:    !    World    Hello

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()
        ' Displays the properties and values of the Stack.
        Console.WriteLine(ControlChars.Tab & "Count:    {0}", myStack.Count)
        Console.Write(ControlChars.Tab & "Values:")
    End Sub
    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("    {0}", obj)
        Next obj
    End Sub 'PrintValues

End Class

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


Stackの容量は、Stackが保持できる要素の数です。The capacity of a Stack is the number of elements the Stack can hold. 要素が追加される、Stack容量が増やされます自動的に再割り当て、必要に応じて。As elements are added to a Stack, the capacity is automatically increased as required through reallocation.


使用することをお勧めしません、Stackクラスの新しい開発します。We don't recommend that you use the Stack class for new development. ジェネリックを使用すること勧め代わりに、System.Collections.Generic.Stack<T>クラス。Instead, we recommend that you use the generic System.Collections.Generic.Stack<T> class. 詳細については、次を参照してください。非ジェネリック コレクションを使用してはならないGitHub でします。For more information, see Non-generic collections shouldn't be used on GitHub.

場合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 受け入れるnull有効な値としてでき、重複する要素。Stack accepts null as a valid value and allows duplicate elements.


Stack() Stack() Stack() Stack()

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

Stack(ICollection) Stack(ICollection) Stack(ICollection) Stack(ICollection)

指定したコレクションからコピーした要素を格納し、コピーされる要素の数と同じ初期量を備えた、Stack クラスの新しいインスタンスを初期化します。Initializes a new instance of the Stack class that contains elements copied from the specified collection and has the same initial capacity as the number of elements copied.

Stack(Int32) Stack(Int32) Stack(Int32) Stack(Int32)

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


Count Count Count Count

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

IsSynchronized IsSynchronized IsSynchronized IsSynchronized

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

SyncRoot SyncRoot SyncRoot SyncRoot

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


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

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

Clone() Clone() Clone() Clone()

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

Contains(Object) Contains(Object) Contains(Object) Contains(Object)

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

CopyTo(Array, Int32) CopyTo(Array, Int32) CopyTo(Array, Int32) CopyTo(Array, Int32)

既存の 1 次元の StackArray をコピーします。コピー操作は、配列の指定したインデックスから始まります。Copies the Stack 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()

IEnumeratorStack を返します。Returns an IEnumerator for the Stack.

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

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

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

Push(Object) Push(Object) Push(Object) Push(Object)

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

Synchronized(Stack) Synchronized(Stack) Synchronized(Stack) Synchronized(Stack)

Stack 用の同期された (スレッド セーフな) ラッパーを返します。Returns a synchronized (thread safe) wrapper for the Stack.

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

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

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

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

(Inherited from Object)


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.


スレッド セーフ

パブリック静的 (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.

スレッド セーフを保証するために、 Stack、によって返されるラッパーを通じて、すべての操作を行う必要がある、Synchronized(Stack)メソッド。To guarantee the thread safety of the Stack, all operations must be done through the wrapper returned by the Synchronized(Stack) method.

コレクションの列挙は、本質的にスレッド セーフなプロシージャではありません。Enumerating through a collection is intrinsically not a thread-safe procedure. コレクションの同期がとられている場合でも、別のスレッドによってそのコレクションを変更できるため、変更の結果として列挙子は例外をスローします。Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. 列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチします。To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.