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 kolekci objektů typu last-in-first-out (LIFO).
public ref class Stack : System::Collections::ICollection
public ref class Stack : ICloneable, System::Collections::ICollection
public class Stack : 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
public class Stack : ICloneable, System.Collections.ICollection
type Stack = class
interface ICollection
interface IEnumerable
[<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
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 do zásobníku a jak zobrazit jeho hodnoty.
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 je Stack počet prvků, které Stack může obsahovat. S tím, jak jsou prvky přidány do Stack, kapacita se automaticky zvýší podle potřeby prostřednictvím reallocation.
Important
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 Ne generické kolekce, které by se neměly používat na GitHubu.
Pokud Count je menší než kapacita zásobníku, Push jedná se o O(1) operaci. Pokud je potřeba zvýšit kapacitu tak, 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
| Name | Description |
|---|---|
| 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 prvky 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
| Name | Description |
|---|---|
| Count |
Získá počet prvků obsažených v objektu Stack. |
| IsSynchronized |
Získá hodnotu označující, zda je přístup k Stack synchronizován (bezpečné vlákno). |
| SyncRoot |
Získá objekt, který lze použít k synchronizaci přístupu k Stack. |
Metody
| Name | Description |
|---|---|
| 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 Arrayindexu počínaje zadaným indexem pole. |
| Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
| GetEnumerator() |
IEnumerator Vrátí hodnotu pro Stackhodnotu . |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| Peek() |
Vrátí objekt v horní části objektu Stack bez jeho odebrání. |
| Pop() |
Odebere a vrátí objekt v horní části objektu Stack. |
| Push(Object) |
Vloží objekt v horní části objektu Stack. |
| Synchronized(Stack) |
Vrátí synchronizovanou obálku (bezpečný pro vlákno Stack) pro . |
| ToArray() |
Zkopíruje pole Stack do nového pole. |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Metody rozšíření
| Name | Description |
|---|---|
| AsParallel(IEnumerable) |
Umožňuje paralelizaci dotazu. |
| AsQueryable(IEnumerable) |
Převede IEnumerable na IQueryable. |
| Cast<TResult>(IEnumerable) |
Přetypuje prvky IEnumerable na zadaný typ. |
| OfType<TResult>(IEnumerable) |
Filtruje prvky IEnumerable na základě zadaného typu. |
Platí pro
Bezpečný přístup z více vláken
Veřejné statické členy tohoto typu (Shared v jazyce Visual Basic) jsou bezpečné pro přístup z více vláken. U žádného člena instance není zaručena bezpečnost pro přístup z více vláken.
Chcete-li zaručit bezpečnost Stackvlákna , všechny operace musí být provedeny prostřednictvím obálky vrácené metodou Synchronized(Stack) .
Výčet prostřednictvím kolekce není vnitřně bezpečným postupem pro přístup z více vláken. I když je kolekce synchronizována, ostatní vlákna mohou stále upravovat kolekci, což způsobí, že enumerátor vyvolá výjimku. Chcete-li zaručit bezpečnost vláken během výčtu, můžete buď uzamknout kolekci během celého výčtu, nebo zachytit výjimky vyplývající z změn provedených jinými vlákny.