Compartilhar via


Stack Classe

Definição

Representa uma coleção não genérica simples UEPS (último a entrar, primeiro a sair) de objetos.

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
Public Class Stack
Implements ICollection
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.

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. À medida que os elementos são adicionados a um Stack, a capacidade é aumentada automaticamente conforme necessário por meio da realocação.

Importante

Não recomendamos que você use a Stack classe para desenvolvimento novo. Em vez disso, recomendamos que você use a classe genérica System.Collections.Generic.Stack<T> . Para obter mais informações, consulte Coleções não genéricas não devem ser usadas no GitHub.

Se Count for menor que a capacidade da pilha, Push será uma O(1) operação. Se a capacidade precisar ser aumentada para acomodar o novo elemento, Push se tornará uma O(n) operação, em que n é Count. Pop é uma O(1) operação .

Stack aceita null como um valor válido e permite elementos duplicados.

Construtores

Stack()

Inicializa uma nova instância da classe Stack que está vazia e tem a capacidade inicial padrão.

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.

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.

Propriedades

Count

Obtém o número de elementos contidos no Stack.

IsSynchronized

Obtém um valor que indica se o acesso à Stack é sincronizado (thread-safe).

SyncRoot

Obtém um objeto que pode ser usado para sincronizar o acesso ao Stack.

Métodos

Clear()

Remove todos os objetos da Stack.

Clone()

Cria uma cópia superficial do Stack.

Contains(Object)

Determina se um elemento está no Stack.

CopyTo(Array, Int32)

Copia o Stack para uma Array de uma dimensão existente, começando no índice de matriz especificado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetEnumerator()

Retorna um IEnumerator para o Stack.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
Peek()

Retorna o objeto na parte superior do Stack sem removê-lo.

Pop()

Remove e retorna o objeto na parte superior do Stack.

Push(Object)

Insere um objeto na parte superior do Stack.

Synchronized(Stack)

Retorna um wrapper sincronizado (thread-safe) para o Stack.

ToArray()

Copia o Stack em uma nova matriz.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Métodos de Extensão

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.

AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.

Aplica-se a

Acesso thread-safe

Os membros estáticos públicos (Shared no Visual Basic) desse são thread-safe. Não há garantia de que qualquer membro de instância seja seguro para threads.

Para garantir a segurança de thread do Stack, todas as operações devem ser feitas por meio do wrapper retornado pelo Synchronized(Stack) método .

A enumeração por meio de uma coleção não é um procedimento thread-safe intrínseco. 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. 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.

Confira também