Stack Klasse

Definition

Stellt eine einfache Last-in-First-out-Auflistung (LIFO) von Objekten dar.

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
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Stack = class
    interface ICollection
    interface ICloneable
    interface IEnumerable
Public Class Stack
Implements ICollection
Public Class Stack
Implements ICloneable, ICollection
Vererbung
Stack
Attribute
Implementiert

Beispiele

Im folgenden Beispiel wird gezeigt, wie Sie Werte zu einem Stapel erstellen und hinzufügen und wie die Werte angezeigt werden.

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

Hinweise

Die Kapazität eines Stack Elements ist die Anzahl der Elemente, die Stack gehalten werden können. Da Elemente zu einer Stackhinzugefügt werden, wird die Kapazität automatisch durch Eine Reallocation erhöht.

Wichtig

Es wird nicht empfohlen, die Stack Klasse für neue Entwicklung zu verwenden. Stattdessen wird empfohlen, die generische System.Collections.Generic.Stack<T> Klasse zu verwenden. Weitere Informationen finden Sie unter nicht generische Sammlungen, die nicht für GitHub verwendet werden sollten.

Ist Count weniger als die Kapazität des Stapels, Push ist ein O(1) Vorgang. Wenn die Kapazität erhöht werden muss, um das neue Element zu erfüllen, Push wird ein Vorgang, wo n es sich Countum einen O(n) Vorgang handelt. Pop ist ein O(1) Vorgang.

Stack akzeptiert null als gültiger Wert und ermöglicht doppelte Elemente.

Konstruktoren

Stack()

Initialisiert eine neue, leere Instanz der Stack-Klasse, die die Standardanfangskapazität aufweist.

Stack(ICollection)

Initialisiert eine neue Instanz der Stack-Klasse, die aus der angegebenen Auflistung kopierte Elemente enthält und deren anfängliche Kapazität der Anzahl der kopierten Elemente entspricht.

Stack(Int32)

Initialisiert eine neue, leere Instanz der Stack-Klasse, die über die angegebene anfängliche Kapazität, mindestens aber über die anfängliche Standardkapazität verfügt.

Eigenschaften

Count

Ruft die Anzahl der Elemente ab, die in Stack enthalten sind.

IsSynchronized

Ruft einen Wert ab, der angibt, ob der Zugriff auf die Stack synchronisiert (threadsicher) ist.

SyncRoot

Ruft ein Objekt ab, mit dem der Zugriff auf Stack synchronisiert werden kann.

Methoden

Clear()

Entfernt alle Objekte aus dem Stack.

Clone()

Erstellt eine flache Kopie von Stack.

Contains(Object)

Bestimmt, ob sich ein Element in Stack befindet.

CopyTo(Array, Int32)

Kopiert die Stack in ein vorhandenes eindimensionales Array, beginnend ab dem angegebenen Arrayindex.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetEnumerator()

Gibt einen IEnumerator für das Stack zurück.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
Peek()

Gibt das oberste Objekt von Stack zurück, ohne es zu entfernen.

Pop()

Entfernt das Objekt oben im Stack und gibt es zurück.

Push(Object)

Fügt ein Objekt am Anfang des Stack ein.

Synchronized(Stack)

Gibt einen synchronisierten (threadsicheren) Wrapper für Stack zurück.

ToArray()

Kopiert Stack in ein neues Array.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Erweiterungsmethoden

Cast<TResult>(IEnumerable)

Wandelt die Elemente eines IEnumerable in den angegebenen Typ um

OfType<TResult>(IEnumerable)

Filtert die Elemente eines IEnumerable anhand eines angegebenen Typs

AsParallel(IEnumerable)

Ermöglicht die Parallelisierung einer Abfrage.

AsQueryable(IEnumerable)

Konvertiert einen IEnumerable in einen IQueryable.

Gilt für:

Threadsicherheit

Öffentliche statische Elemente (Sharedin Visual Basic) dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Um die Threadsicherheit des Threads Stackzu gewährleisten, müssen alle Vorgänge über den von der Synchronized(Stack) Methode zurückgegebenen Wrapper durchgeführt werden.

Die Enumeration einer Auflistung ist systemintern keine threadsichere Prozedur. Selbst wenn eine Auflistung synchronisiert wird, besteht die Möglichkeit, dass andere Threads sie ändern. Dies führt dazu, dass der Enumerator eine Ausnahme auslöst. Um während der Enumeration Threadsicherheit zu gewährleisten, können Sie entweder die Auflistung während der gesamten Enumeration sperren oder die Ausnahmen, die aus von anderen Threads stammenden Änderungen resultieren, abfangen.

Siehe auch