Stack Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje jednoduchou neobecnou kolekci objektů LIFO (Last In First Out).
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
- Dědičnost
-
Stack
- Atributy
- Implementuje
Příklady
Následující příklad ukazuje, jak vytvořit a přidat hodnoty stacku a jak zobrazit jeho hodnoty.
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
Poznámky
Kapacita objektu Stack je počet prvků, které Stack může obsahovat. Při přidání prvků do objektu Stackse kapacita automaticky zvýší podle potřeby prostřednictvím přerozdělení.
Důležité
Nedoporučujeme používat Stack
třídu pro nový vývoj. Místo toho doporučujeme použít obecnou System.Collections.Generic.Stack<T> třídu. Další informace najdete v tématu Na GitHubu by se neměly používat obecné kolekce .
Pokud Count je menší než kapacita zásobníku, Push jedná se o O(1)
operaci. Pokud je potřeba kapacitu zvýšit, aby vyhovovala novému prvku, Push stane se O(n)
operace, kde n
je Count. Pop je operace O(1)
.
Stack přijímá null
jako platnou hodnotu a umožňuje duplicitní prvky.
Konstruktory
Stack() |
Inicializuje novou instanci Stack třídy, která je prázdná a má výchozí počáteční kapacitu. |
Stack(ICollection) |
Inicializuje novou instanci Stack třídy, která obsahuje elementy zkopírované ze zadané kolekce a má stejnou počáteční kapacitu jako počet zkopírovaných prvků. |
Stack(Int32) |
Inicializuje novou instanci Stack třídy, která je prázdná a má zadanou počáteční kapacitu nebo výchozí počáteční kapacitu, podle toho, která hodnota je větší. |
Vlastnosti
Count |
Získá počet elementů obsažených v objektu Stack. |
IsSynchronized |
Získá hodnotu označující, zda přístup k objektu Stack je synchronizován (bezpečný pro přístup z více vláken). |
SyncRoot |
Získá objekt, který lze použít k synchronizaci přístupu k .Stack |
Metody
Clear() |
Odebere všechny objekty z objektu Stack. |
Clone() |
Vytvoří mělkou kopii .Stack |
Contains(Object) |
Určuje, zda je prvek v objektu Stack. |
CopyTo(Array, Int32) |
Stack Zkopíruje do existujícího jednorozměrného Arrayobjektu počínaje zadaným indexem pole. |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetEnumerator() |
Vrátí hodnotu IEnumerator pro Stack. |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
Peek() |
Vrátí objekt v horní části objektu bez Stack jeho odebrání. |
Pop() |
Odebere a vrátí objekt v horní části objektu Stack. |
Push(Object) |
Vloží objekt do horní části objektu Stack. |
Synchronized(Stack) |
Vrátí synchronizovanou obálku (bez vláken) pro Stack. |
ToArray() |
Zkopíruje do Stack nového pole. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Metody rozšíření
Cast<TResult>(IEnumerable) |
Přetypuje prvky objektu na IEnumerable zadaný typ. |
OfType<TResult>(IEnumerable) |
Filtruje prvky objektu IEnumerable na základě zadaného typu. |
AsParallel(IEnumerable) |
Umožňuje paralelizaci dotazu. |
AsQueryable(IEnumerable) |
Převede objekt na IEnumerableIQueryable. |
Platí pro
Bezpečný přístup z více vláken
Veřejné statické členy (Shared
v jazyce Visual Basic) tohoto typu jsou bezpečné pro přístup z více vláken. U členů instancí není zaručena bezpečnost pro přístup z více vláken.
Aby byla zajištěna bezpečnost Stackvlákna , musí být všechny operace prováděny prostřednictvím obálky vrácené metodou Synchronized(Stack) .
Výčet prostřednictvím kolekce nemůže být procedurou bezpečnou pro přístup z více vláken. I v případě, že jde o synchronizovanou kolekci, mohou úpravy provádět i ostatní vlákna, což způsobuje vyvolání výjimky enumerátorem. K zaručení bezpečnosti přístupu z více vláken můžete buďto zamknout kolekci na celou dobu práce s výčtem, nebo zachycovat výjimky vzniklé v důsledku změn prováděných ostatními vlákny.