Stack<T>.Push(T) メソッド

定義

Stack<T> の先頭にオブジェクトを挿入します。

public:
 void Push(T item);
public void Push (T item);
member this.Push : 'T -> unit
Public Sub Push (item As T)

パラメーター

item
T

Stack<T> にプッシュするオブジェクト。 参照型の場合は null の値を使用できます。

次のコード例は、メソッドを含む、ジェネリッククラスのいくつかのメソッドを示して Stack<T> Push います。

このコード例では、既定の容量を持つ文字列のスタックを作成し、メソッドを使用して Push 5 つの文字列をスタックにプッシュします。 スタックの要素が列挙され、スタックの状態が変更されることはありません。 メソッドは、 Pop スタックから最初の文字列をポップするために使用されます。 メソッドは、 Peek スタック上の次の項目を確認するために使用され、その後、メソッドを Pop 使用してポップします。

ToArrayメソッドは、配列を作成してスタック要素をコピーするために使用されます。次に、によって取得されるコンストラクターに配列が渡され Stack<T> ます。その後 IEnumerable<T> 、要素の順序を逆にしてスタックのコピーが作成されます。 コピーの要素が表示されます。

スタックのサイズの2倍の配列が作成され、メソッドを使用して配列 CopyTo の途中から配列の要素がコピーされます。 Stack<T>コンストラクターは、要素の順序を逆にしてスタックのコピーを作成するために再び使用されます。したがって、3つの null 要素が末尾にあります。

メソッドは、 Contains 文字列 "4" がスタックの最初のコピーに含まれていることを示すために使用されます。その後、 Clear メソッドはコピーをクリアし、 Count プロパティはスタックが空であることを示します。

using System;
using System.Collections.Generic;

class Example
{
    public static void Main()
    {
        Stack<string> numbers = new Stack<string>();
        numbers.Push("one");
        numbers.Push("two");
        numbers.Push("three");
        numbers.Push("four");
        numbers.Push("five");

        // A stack can be enumerated without disturbing its contents.
        foreach( string number in numbers )
        {
            Console.WriteLine(number);
        }

        Console.WriteLine("\nPopping '{0}'", numbers.Pop());
        Console.WriteLine("Peek at next item to destack: {0}",
            numbers.Peek());
        Console.WriteLine("Popping '{0}'", numbers.Pop());

        // Create a copy of the stack, using the ToArray method and the
        // constructor that accepts an IEnumerable<T>.
        Stack<string> stack2 = new Stack<string>(numbers.ToArray());

        Console.WriteLine("\nContents of the first copy:");
        foreach( string number in stack2 )
        {
            Console.WriteLine(number);
        }

        // Create an array twice the size of the stack and copy the
        // elements of the stack, starting at the middle of the
        // array.
        string[] array2 = new string[numbers.Count * 2];
        numbers.CopyTo(array2, numbers.Count);

        // Create a second stack, using the constructor that accepts an
        // IEnumerable(Of T).
        Stack<string> stack3 = new Stack<string>(array2);

        Console.WriteLine("\nContents of the second copy, with duplicates and nulls:");
        foreach( string number in stack3 )
        {
            Console.WriteLine(number);
        }

        Console.WriteLine("\nstack2.Contains(\"four\") = {0}",
            stack2.Contains("four"));

        Console.WriteLine("\nstack2.Clear()");
        stack2.Clear();
        Console.WriteLine("\nstack2.Count = {0}", stack2.Count);
    }
}

/* This code example produces the following output:

five
four
three
two
one

Popping 'five'
Peek at next item to destack: four
Popping 'four'

Contents of the first copy:
one
two
three

Contents of the second copy, with duplicates and nulls:
one
two
three




stack2.Contains("four") = False

stack2.Clear()

stack2.Count = 0
 */
Imports System.Collections.Generic

Module Example

    Sub Main

        Dim numbers As New Stack(Of String)
        numbers.Push("one")
        numbers.Push("two")
        numbers.Push("three")
        numbers.Push("four")
        numbers.Push("five")

        ' A stack can be enumerated without disturbing its contents.
        For Each number As String In numbers
            Console.WriteLine(number)
        Next

        Console.WriteLine(vbLf & "Popping '{0}'", numbers.Pop())
        Console.WriteLine("Peek at next item to pop: {0}", _
            numbers.Peek())    
        Console.WriteLine("Popping '{0}'", numbers.Pop())

        ' Create another stack, using the ToArray method and the
        ' constructor that accepts an IEnumerable(Of T). Note that
        ' the order of items on the new stack is reversed.
        Dim stack2 As New Stack(Of String)(numbers.ToArray())

        Console.WriteLine(vbLf & "Contents of the first copy:")
        For Each number As String In stack2
            Console.WriteLine(number)
        Next
        
        ' Create an array twice the size of the stack, compensating
        ' for the fact that Visual Basic allocates an extra array 
        ' element. Copy the elements of the stack, starting at the
        ' middle of the array. 
        Dim array2((numbers.Count * 2) - 1) As String
        numbers.CopyTo(array2, numbers.Count)
        
        ' Create a second stack, using the constructor that accepts an
        ' IEnumerable(Of T). The elements are reversed, with the null
        ' elements appearing at the end of the stack when enumerated.
        Dim stack3 As New Stack(Of String)(array2)

        Console.WriteLine(vbLf & _
            "Contents of the second copy, with duplicates and nulls:")
        For Each number As String In stack3
            Console.WriteLine(number)
        Next

        Console.WriteLine(vbLf & "stack2.Contains(""four"") = {0}", _
            stack2.Contains("four"))

        Console.WriteLine(vbLf & "stack2.Clear()")
        stack2.Clear()
        Console.WriteLine(vbLf & "stack2.Count = {0}", _
            stack2.Count)
    End Sub
End Module

' This code example produces the following output:
'
'five
'four
'three
'two
'one
'
'Popping 'five'
'Peek at next item to pop: four
'Popping 'four'
'
'Contents of the first copy:
'one
'two
'three
'
'Contents of the second copy, with duplicates and nulls:
'one
'two
'three
'
'
'
'
'stack2.Contains("four") = False
'
'stack2.Clear()
'
'stack2.Count = 0

注釈

Stack<T> は配列として実装されます。

Count 既に容量に等しい場合、の容量は、内部配列が自動的に再割り当てされ、 Stack<T> 新しい要素が追加される前に既存の要素が新しい配列にコピーされます。

T が参照型の場合、必要に応じて null をプレースホルダーとして Stack<T> にプッシュすることができます。 スタック内のスロットを占有し、任意のオブジェクトとして扱われます。

Countがスタックの容量より小さい場合、 Push は O (1) 操作になります。 新しい要素を格納するために容量を増やす必要がある場合、 Push は O ( n ) 操作になります。ここで、 nCount です。

適用対象

こちらもご覧ください