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


다음 예제에서는 값을 만들어 스택에 추가 하는 방법과 해당 값을 표시 하는 방법을 보여 줍니다.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.Collections

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

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. 용량을 늘려야 하 여 새 요소를 해야 하는 경우 Push 는 o (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)

Stack을 지정한 배열 인덱스에서 시작하여 기존의 1차원 Array에 복사합니다.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.

적용 대상

스레드 보안

공용 정적 (Shared Visual Basic의)이 형식의 멤버는 스레드로부터 안전 합니다.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. 컬렉션이 동기화되어 있을 때 다른 스레드에서 해당 컬렉션을 수정할 수 있으므로 이렇게 되면 열거자에서 예외가 throw됩니다.Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. 열거하는 동안 스레드로부터 안전을 보장하려면 전체 열거를 수행하는 동안 컬렉션을 잠그거나 다른 스레드에서 변경된 내용으로 인해 발생한 예외를 catch하면 됩니다.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.

추가 정보