Stack Classe

Definição

Representa uma coleção não genérica simples UEPS (último a entrar, primeiro a sair) de objetos.Represents a simple last-in-first-out (LIFO) non-generic collection of objects.

public ref class Stack : ICloneable, System::Collections::ICollection
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class Stack : ICloneable, System.Collections.ICollection
type Stack = class
    interface ICollection
    interface ICloneable
    interface IEnumerable
Public Class Stack
Implements ICloneable, ICollection
Herança
Stack
Atributos
Implementações

Exemplos

O exemplo a seguir mostra como criar e adicionar valores a uma pilha e como exibir seus valores.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.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

Comentários

A capacidade de um Stack é o número de elementos que o Stack pode conter.The capacity of a Stack is the number of elements the Stack can hold. Como os elementos são adicionados a um Stack, a capacidade é aumentada automaticamente conforme necessário por meio de realocação.As elements are added to a Stack, the capacity is automatically increased as required through reallocation.

Importante

Não recomendamos que você use a classe Stack para o novo desenvolvimento.We don't recommend that you use the Stack class for new development. Em vez disso, recomendamos que você use a classe System.Collections.Generic.Stack<T> genérica.Instead, we recommend that you use the generic System.Collections.Generic.Stack<T> class. Para obter mais informações, consulte coleções não genéricas não devem ser usadas no github.For more information, see Non-generic collections shouldn't be used on GitHub.

Se Count for menor que a capacidade da pilha, Push será uma operação O(1).If Count is less than the capacity of the stack, Push is an O(1) operation. Se a capacidade precisar ser aumentada para acomodar o novo elemento, Push se tornará uma operação O(n), em que n é Count.If the capacity needs to be increased to accommodate the new element, Push becomes an O(n) operation, where n is Count. Pop é uma operação O(1).Pop is an O(1) operation.

Stack aceita null como um valor válido e permite elementos duplicados.Stack accepts null as a valid value and allows duplicate elements.

Construtores

Stack()

Inicializa uma nova instância da classe Stack que está vazia e tem a capacidade inicial padrão.Initializes a new instance of the Stack class that is empty and has the default initial capacity.

Stack(ICollection)

Inicializa uma nova instância da classe Stack, que contém os elementos copiados da coleção especificada e tem a mesma capacidade inicial que o número de elementos copiados.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)

Inicializa uma nova instância da classe Stack que está vazia e tem a capacidade inicial especificada ou a capacidade inicial padrão, a que for maior.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.

Propriedades

Count

Obtém o número de elementos contidos no Stack.Gets the number of elements contained in the Stack.

IsSynchronized

Obtém um valor que indica se o acesso à Stack é sincronizado (thread-safe).Gets a value indicating whether access to the Stack is synchronized (thread safe).

SyncRoot

Obtém um objeto que pode ser usado para sincronizar o acesso ao Stack.Gets an object that can be used to synchronize access to the Stack.

Métodos

Clear()

Remove todos os objetos da Stack.Removes all objects from the Stack.

Clone()

Cria uma cópia superficial do Stack.Creates a shallow copy of the Stack.

Contains(Object)

Determina se um elemento está no Stack.Determines whether an element is in the Stack.

CopyTo(Array, Int32)

Copia o Stack para um unidimensional Array existente, começando no índice da matriz especificada.Copies the Stack to an existing one-dimensional Array, starting at the specified array index.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
GetEnumerator()

Retorna um IEnumerator para o Stack.Returns an IEnumerator for the Stack.

GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
Peek()

Retorna o objeto na parte superior do Stack sem removê-lo.Returns the object at the top of the Stack without removing it.

Pop()

Remove e retorna o objeto na parte superior do Stack.Removes and returns the object at the top of the Stack.

Push(Object)

Insere um objeto na parte superior do Stack.Inserts an object at the top of the Stack.

Synchronized(Stack)

Retorna um wrapper sincronizado (thread-safe) para o Stack.Returns a synchronized (thread safe) wrapper for the Stack.

ToArray()

Copia o Stack em uma nova matriz.Copies the Stack to a new array.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Herdado de Object)

Métodos de Extensão

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.Enables parallelization of a query.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.Converts an IEnumerable to an IQueryable.

Aplica-se a

Acesso thread-safe

Os membros estáticos públicos (Shared no Visual Basic) desse são thread-safe.Public static (Shared in Visual Basic) members of this type are thread safe. Não há garantia de que qualquer membro de instância seja thread-safe.Any instance members are not guaranteed to be thread safe.

Para garantir a segurança do thread do Stack, todas as operações devem ser feitas por meio do wrapper retornado pelo método Synchronized(Stack).To guarantee the thread safety of the Stack, all operations must be done through the wrapper returned by the Synchronized(Stack) method.

A enumeração por meio de uma coleção não é um procedimento thread-safe intrínseco.Enumerating through a collection is intrinsically not a thread-safe procedure. Mesmo quando uma coleção está sincronizada, outros threads ainda podem modificar a coleção, o que faz o enumerador lançar uma exceção.Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. Para garantir thread-safe durante a enumeração, é possível bloquear a coleção durante toda a enumeração ou verificar as exceções resultantes das alterações feitas por outros threads.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.

Veja também