Stack<T> 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
동일한 지정된 형식의 인스턴스에 대한 LIFO(Last-in-First-out) 컬렉션의 변수 크기를 나타냅니다.
generic <typename T>
public ref class Stack : System::Collections::Generic::IEnumerable<T>, System::Collections::Generic::IReadOnlyCollection<T>, System::Collections::ICollection
generic <typename T>
public ref class Stack : System::Collections::Generic::IEnumerable<T>, System::Collections::ICollection
public class Stack<T> : 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.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
public class Stack<T> : System.Collections.Generic.IEnumerable<T>, System.Collections.ICollection
type Stack<'T> = class
interface seq<'T>
interface IEnumerable
interface IReadOnlyCollection<'T>
interface ICollection
[<System.Runtime.InteropServices.ComVisible(false)>]
[<System.Serializable>]
type Stack<'T> = class
interface seq<'T>
interface ICollection
interface IEnumerable
[<System.Runtime.InteropServices.ComVisible(false)>]
[<System.Serializable>]
type Stack<'T> = class
interface seq<'T>
interface IEnumerable
interface ICollection
interface IReadOnlyCollection<'T>
type Stack<'T> = class
interface seq<'T>
interface ICollection
interface IEnumerable
Public Class Stack(Of T)
Implements ICollection, IEnumerable(Of T), IReadOnlyCollection(Of T)
Public Class Stack(Of T)
Implements ICollection, IEnumerable(Of T)
형식 매개 변수
- T
스택에 있는 요소의 형식을 지정합니다.
- 상속
-
Stack<T>
- 특성
- 구현
예제
다음 코드 예제에서는 Stack<T> 제네릭 클래스의 여러 메서드를 보여 줍니다. 이 코드 예제에서는 기본 용량을 사용하여 문자열 스택을 만들고 Push 메서드를 사용하여 5개의 문자열을 스택에 푸시합니다. 스택의 요소는 열거되며 스택의 상태는 변경되지 않습니다. Pop 메서드는 스택에서 첫 번째 문자열을 팝하는 데 사용됩니다. Peek 메서드는 스택에서 다음 항목을 보는 데 사용되며 Pop 메서드를 사용하여 팝오프합니다.
ToArray 메서드는 배열을 만들고 스택 요소를 복사하는 데 사용되며, 배열은 IEnumerable<T>사용하는 Stack<T> 생성자에 전달되어 역방향 요소 순서로 스택의 복사본을 만듭니다. 복사본의 요소가 표시됩니다.
스택 크기의 두 배인 배열이 생성되고 CopyTo 메서드를 사용하여 배열의 중간에서 시작하는 배열 요소를 복사합니다. Stack<T> 생성자는 역방향 요소 순서로 스택의 복사본을 만드는 데 다시 사용됩니다. 따라서 세 개의 null 요소가 끝에 있습니다.
Contains 메서드는 문자열 "4"가 스택의 첫 번째 복사본에 있음을 표시하는 데 사용되며, 그 후 Clear 메서드는 복사본을 지우고 Count 속성은 스택이 비어 있음을 보여 줍니다.
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
*/
open System
open System.Collections.Generic
let numbers = Stack()
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 number in numbers do
printfn $"{number}"
printfn $"\nPopping '{numbers.Pop()}'"
printfn $"Peek at next item to destack: {numbers.Peek()}"
numbers.Peek() |> ignore
printfn $"Popping '{numbers.Pop()}'"
// Create a copy of the stack, using the ToArray method and the
// constructor that accepts an IEnumerable<T>.
let stack2 = numbers.ToArray() |> Stack
printfn "\nContents of the first copy:"
for number in stack2 do
printfn $"{number}"
// Create an array twice the size of the stack and copy the
// elements of the stack, starting at the middle of the
// array.
let array2 = numbers.Count * 2 |> Array.zeroCreate
numbers.CopyTo(array2, numbers.Count)
// Create a second stack, using the constructor that accepts an
// IEnumerable(Of T).
let stack3 = Stack array2
printfn "\nContents of the second copy, with duplicates and nulls:"
for number in stack3 do
printfn $"{number}"
printfn
$"""
stack2.Contains "four" = {stack2.Contains "four"}"""
printfn "\nstack2.Clear()"
stack2.Clear()
printfn $"\nstack2.Count = {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.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> 배열로 구현됩니다.
스택 및 큐는 정보를 위해 임시 스토리지가 필요한 경우에 유용합니다. 즉, 해당 값을 검색한 후 요소를 삭제할 수 있습니다. 컬렉션에 저장된 것과 동일한 순서로 정보에 액세스해야 하는 경우 Queue<T> 사용합니다. 정보에 역순으로 액세스해야 하는 경우 System.Collections.Generic.Stack<T> 사용합니다.
여러 스레드에서 컬렉션에 동시에 액세스해야 하는 경우 System.Collections.Concurrent.ConcurrentStack<T> 및 System.Collections.Concurrent.ConcurrentQueue<T> 형식을 사용합니다.
System.Collections.Generic.Stack<T> 일반적인 용도는 다른 프로시저를 호출하는 동안 변수 상태를 유지하는 것입니다.
System.Collections.Generic.Stack<T> 요소에 대해 세 가지 주요 작업을 수행할 수 있습니다.
Stack<T> 용량은 Stack<T> 보유할 수 있는 요소의 수입니다. 요소가 Stack<T>추가되면 내부 배열을 다시 할당하여 필요에 따라 용량이 자동으로 증가합니다. TrimExcess호출하여 용량을 줄일 수 있습니다.
Count 스택의 용량보다 작으면 Push O(1) 작업입니다. 새 요소를 수용하기 위해 용량을 늘려야 하는 경우 Pushn
CountO(n
) 작업이 됩니다.
Pop O(1) 작업입니다.
Stack<T> 참조 형식에 유효한 값으로 null
허용하고 중복 요소를 허용합니다.
생성자
Stack<T>() |
비어 있고 기본 초기 용량이 있는 Stack<T> 클래스의 새 인스턴스를 초기화합니다. |
Stack<T>(IEnumerable<T>) |
지정된 컬렉션에서 복사된 요소를 포함하고 복사된 요소 수를 수용할 수 있는 충분한 용량이 있는 Stack<T> 클래스의 새 인스턴스를 초기화합니다. |
Stack<T>(Int32) |
비어 있고 지정된 초기 용량 또는 기본 초기 용량이 있는 Stack<T> 클래스의 새 인스턴스를 초기화합니다. |
속성
Capacity |
크기 조정 없이 내부 데이터 구조에서 보유할 수 있는 요소의 총 수를 가져옵니다. |
Count |
Stack<T>포함된 요소 수를 가져옵니다. |
메서드
Clear() |
Stack<T>모든 개체를 제거합니다. |
Contains(T) |
요소가 Stack<T>있는지 여부를 확인합니다. |
CopyTo(T[], Int32) | |
EnsureCapacity(Int32) |
이 Stack의 용량이 지정된 |
Equals(Object) |
지정된 개체가 현재 개체와 같은지 여부를 확인합니다. (다음에서 상속됨 Object) |
GetEnumerator() |
Stack<T>대한 열거자를 반환합니다. |
GetHashCode() |
기본 해시 함수로 사용됩니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type 가져옵니다. (다음에서 상속됨 Object) |
MemberwiseClone() |
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
Peek() |
개체를 제거하지 않고 Stack<T> 맨 위에 있는 개체를 반환합니다. |
Pop() |
Stack<T>맨 위에 있는 개체를 제거하고 반환합니다. |
Push(T) |
Stack<T>맨 위에 개체를 삽입합니다. |
ToArray() |
Stack<T> 새 배열에 복사합니다. |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
TrimExcess() |
해당 수가 현재 용량의 90% 미만인 경우 Stack<T>실제 요소 수로 용량을 설정합니다. |
TrimExcess(Int32) |
Stack<T> 개체의 용량을 지정된 수의 항목으로 설정합니다. |
TryPeek(T) |
Stack<T>맨 위에 개체가 있는지 여부를 나타내는 값을 반환하고 개체가 있는 경우 |
TryPop(T) |
Stack<T>맨 위에 개체가 있는지 여부를 나타내는 값을 반환하고 개체가 있는 경우 |
명시적 인터페이스 구현
ICollection.CopyTo(Array, Int32) |
특정 Array 인덱스에서 시작하여 ICollection 요소를 Array복사합니다. |
ICollection.IsSynchronized |
ICollection 대한 액세스가 동기화되는지 여부를 나타내는 값을 가져옵니다(스레드로부터 안전). |
ICollection.SyncRoot |
ICollection대한 액세스를 동기화하는 데 사용할 수 있는 개체를 가져옵니다. |
IEnumerable.GetEnumerator() |
컬렉션을 반복하는 열거자를 반환합니다. |
IEnumerable<T>.GetEnumerator() |
컬렉션을 반복하는 열거자를 반환합니다. |
확장 메서드
적용 대상
스레드 보안
이 형식의 공용 정적(Visual Basic의Shared
) 멤버는 스레드로부터 안전합니다. 모든 인스턴스 멤버는 스레드로부터 안전하게 보호되지 않습니다.
컬렉션이 수정되지 않는 한 Stack<T> 여러 판독기를 동시에 지원할 수 있습니다. 그럼에도 불구하고 컬렉션을 열거하는 것은 본질적으로 스레드로부터 안전한 프로시저가 아닙니다. 열거 중 스레드 안전을 보장하기 위해 전체 열거형 중에 컬렉션을 잠글 수 있습니다. 읽기 및 쓰기를 위해 여러 스레드에서 컬렉션에 액세스할 수 있도록 하려면 고유한 동기화를 구현해야 합니다.
추가 정보
.NET