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) .
Перечисление коллекции не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.