Stack Class

Definicja

Reprezentuje proste ostatni wejściu — pierwszy na wyjściu (LIFO) nieogólna kolekcja obiektów. Represents a simple last-in-first-out (LIFO) non-generic collection of objects.

[System.Runtime.InteropServices.ComVisible(true)]
[Serializable]
public class Stack : ICloneable, System.Collections.ICollection
Dziedziczenie
Stack
Atrybuty
ComVisibleAttribute SerializableAttribute
Implementuje

Przykłady

Poniższy przykład pokazuje, jak utworzyć i dodać wartości do Stack i sposób wyświetlania wartości.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 );
   }

   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
Imports System.Collections
Imports Microsoft.VisualBasic

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 'PrintValues

End Class

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

Uwagi

Ogólny wersję tej kolekcji, zobacz System.Collections.Generic.Stack<T>.For the generic version of this collection, see System.Collections.Generic.Stack<T>.

Pojemność Stack jest liczba elementów, które Stack może przechowywać.The capacity of a Stack is the number of elements the Stack can hold. Gdy elementy są dodawane do Stack, pojemność jest automatycznie zwiększana zgodnie z wymaganiami za pośrednictwem ponownej alokacji.As elements are added to a Stack, the capacity is automatically increased as required through reallocation.

Jeśli Count jest mniejsza niż pojemność stosu, Push jest operacją O(1).If Count is less than the capacity of the stack, Push is an O(1) operation. Jeśli pojemność musi zostać zwiększona, aby pomieścić nowy element Push staje się O (n) operacji, gdzie n jest Count.If the capacity needs to be increased to accommodate the new element, Push becomes an O(n) operation, where n is Count. Pop jest operacją O(1).Pop is an O(1) operation.

Stack akceptuje null jako prawidłowa wartość i umożliwia zduplikowane elementy.Stack accepts null as a valid value and allows duplicate elements.

Konstruktory

Stack()

Inicjuje nowe wystąpienie klasy Stack klasę, która jest pusta i ma pojemność domyślna. Initializes a new instance of the Stack class that is empty and has the default initial capacity.

Stack(ICollection)

Inicjuje nowe wystąpienie klasy Stack klasę, która zawiera elementy kopiowane z określonej kolekcji i ma ten sam pojemność jako liczba elementów kopiowanych. 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)

Inicjuje nowe wystąpienie klasy Stack klasę, która jest pusta i ma określony pojemność lub pojemność początkową domyślną, która kwota jest większa. 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.

Właściwości

Count

Pobiera liczbę elementów znajdujących się w Stack. Gets the number of elements contained in the Stack.

IsSynchronized

Pobiera wartość wskazującą czy dostęp do Stack jest synchronizowane (wątkowo). Gets a value indicating whether access to the Stack is synchronized (thread safe).

SyncRoot

Pobiera obiekt, który może służyć do synchronizowania dostępu do Stack. Gets an object that can be used to synchronize access to the Stack.

Metody

Clear()

Usuwa wszystkie obiekty z Stack. Removes all objects from the Stack.

Clone()

Tworzy kopię pobieżną Stack. Creates a shallow copy of the Stack.

Contains(Object)

Określa, czy element jest Stack. Determines whether an element is in the Stack.

CopyTo(Array, Int32)

Kopiuje Stack do istniejącej jednowymiarowej Array, rozpoczynając od określonego indeksu tablicy. Copies the Stack to an existing one-dimensional Array, starting at the specified array index.

Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi. Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetEnumerator()

Zwraca IEnumerator dla Stack. Returns an IEnumerator for the Stack.

GetHashCode()

Służy jako domyślnej funkcji skrótu. Serves as the default hash function.

(Inherited from Object)
GetType()

Pobiera Type bieżącego wystąpienia. Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone()

Tworzy płytką kopię bieżącego Object. Creates a shallow copy of the current Object.

(Inherited from Object)
Peek()

Zwraca obiekt, w górnej części Stack bez usuwania go. Returns the object at the top of the Stack without removing it.

Pop()

Usuwa i zwraca obiekt, w górnej części Stack. Removes and returns the object at the top of the Stack.

Push(Object)

Wstawienie obiektu w górnej części Stack. Inserts an object at the top of the Stack.

Synchronized(Stack)

Zwraca zsynchronizowany otoki (wątkowo) dla Stack. Returns a synchronized (thread safe) wrapper for the Stack.

ToArray()

Kopiuje Stack do nowej tablicy. Copies the Stack to a new array.

ToString()

Zwraca ciąg, który reprezentuje bieżący obiekt. Returns a string that represents the current object.

(Inherited from Object)

Extension Methods

Cast<TResult>(IEnumerable)

Rzutuje elementy IEnumerable do określonego typu. Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

Filtruje elementy IEnumerable na podstawie określonego typu. Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

Umożliwia przetwarzanie równoległe zapytania. Enables parallelization of a query.

AsQueryable(IEnumerable)

Konwertuje IEnumerable do IQueryable. Converts an IEnumerable to an IQueryable.

Dotyczy

Bezpieczeństwo wątkowe

Publiczne statyczne (Shared w języku Visual Basic) elementy członkowskie tego typu są bezpieczne dla wątków. Public static (Shared in Visual Basic) members of this type are thread safe. Wystąpienia elementów członkowskich nie dają gwarancji bezpieczeństwa wątków. Any instance members are not guaranteed to be thread safe. Aby zagwarantować bezpieczeństwo wątków z Stack, wszystkie operacje musi odbywać się przy użyciu otoki zwrócony przez Synchronized(Stack) metody. To guarantee the thread safety of the Stack, all operations must be done through the wrapper returned by the Synchronized(Stack) method. Wyliczanie w kolekcji nie jest wewnętrznie procedurą odporną na wielowątkowość. Enumerating through a collection is intrinsically not a thread-safe procedure. Nawet gdy kolekcja jest synchronizowana, inne wątki nadal mogą ją modyfikować. Powoduje to zgłaszanie wyjątku przez moduł wyliczający. Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, można zablokować kolekcję podczas całego procesu wyliczania albo rejestrować wyjątki wynikłe ze zmian wprowadzanych przez inne wątków. 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.

Zobacz także