Поделиться через


Stack Класс

Определение

Представляет простую неуниверсальную коллекцию объектов, работающую по принципу «последним поступил — первым обслужен».

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
Наследование
Stack
Атрибуты
Реализации

Примеры

В следующем примере показано, как создавать и добавлять значения в стек, а также как отображать его значения.

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

Комментарии

Емкость Stack — это количество элементов, которые могут храниться Stack . При добавлении элементов в Stackемкость автоматически увеличивается по мере необходимости путем перераспределения.

Важно!

Не рекомендуется использовать класс для разработки Stack новых приложений. Вместо этого рекомендуется использовать универсальный System.Collections.Generic.Stack<T> класс . Дополнительные сведения см. в статье Неуниверсовые коллекции не должны использоваться на GitHub.

Если Count значение меньше емкости стека, Push является операцией O(1) . Если емкость необходимо увеличить для размещения нового элемента, Push становится операцией O(n) , где n имеет значение Count. PopO(1)— это операция.

Stacknull принимает в качестве допустимого значения и допускает дублирование элементов.

Конструкторы

Stack()

Инициализирует новый экземпляр класса Stack, который является пустым и имеет начальную емкость по умолчанию.

Stack(ICollection)

Инициализирует новый экземпляр класса Stack, который содержит элементы, скопированные из указанной коллекции, и обладает начальной емкостью, равной количеству скопированных элементов.

Stack(Int32)

Инициализирует новый экземпляр Stack, который является пустым и обладает указанной начальной емкостью или емкостью по умолчанию, в зависимости от того, какое значение больше.

Свойства

Count

Получает число элементов, содержащихся в интерфейсе Stack.

IsSynchronized

Возвращает значение, показывающее, является ли доступ к коллекции Stack синхронизированным (потокобезопасным).

SyncRoot

Получает объект, с помощью которого можно синхронизировать доступ к коллекции Stack.

Методы

Clear()

Удаляет все объекты из Stack.

Clone()

Создает неполную копию Stack.

Contains(Object)

Определяет, входит ли элемент в коллекцию Stack.

CopyTo(Array, Int32)

Копирует Stack в существующий одномерный Array, начиная с указанного индекса массива.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetEnumerator()

Возвращает объект IEnumerator для Stack.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
Peek()

Возвращает объект, находящийся в начале Stack, без его удаления.

Pop()

Удаляет и возвращает объект, находящийся в начале Stack.

Push(Object)

Вставляет объект как верхний элемент стека Stack.

Synchronized(Stack)

Возвращает синхронизированную (потокобезопасную) оболочку коллекции Stack.

ToArray()

Копирует Stack в новый массив.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Применяется к

Потокобезопасность

Открытые статические (Shared в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасная работа с членами экземпляров типа не гарантируется.

Чтобы гарантировать потокобезопасность Stack, все операции должны выполняться через оболочку, возвращаемую методом Synchronized(Stack) .

Перечисление коллекции не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.

См. также раздел