Używanie funkcji stack::top i stack::empty STL w programie Visual C++

W tym artykule pokazano, jak używać stack::top funkcji I stack::empty STL w programie Visual C++. Informacje zawarte w tym artykule dotyczą tylko niezarządzanego kodu visual C++.

Oryginalna wersja produktu: Visual C++
Oryginalny numer KB: 158040

Wymagany nagłówek

  • <stack>

Prototyp

template <class _TYPE, class _C, class _A> // Function 1
value_type &stack::top();

template <class _TYPE, class _C, class _A> // Function 2
const value_type &stack::top() const;

template <class _TYPE, class _C, class _A> // Function 3
bool stack::empty() const;

Uwaga

Nazwy klas lub parametrów w prototypie mogą nie być zgodne z wersją w pliku nagłówka. Niektóre z nich zostały zmodyfikowane w celu poprawy czytelności.

Opis funkcji stack::top i stack::empty

Funkcja top zwraca najwyższy element stosu. Przed wywołaniem top funkcji należy upewnić się, że na stosie znajduje się co najmniej jeden element. Pierwsza wersja top funkcji zwraca odwołanie do elementu w górnej części stosu, co umożliwia zmodyfikowanie wartości. Druga funkcja zwraca stałe odwołanie, zapewniając, że stos nie zostanie przypadkowo zmodyfikowany.

Funkcja empty zwraca wartość true , jeśli w stosie nie ma żadnych elementów. Jeśli istnieje co najmniej jeden element, funkcja zwróci wartość false. Należy użyć funkcji, empty aby sprawdzić, czy na stosie pozostały elementy przed wywołaniem top funkcji.

Przykładowy kod

//////////////////////////////////////////////////////////////////////
// Compile options needed: /GX
// StackTop&Empty.cpp : Illustrates how to use the top function to
// retrieve the last element of the controlled
// sequence. It also illustrates how to use the
// empty function to loop though the stack.
// Functions:
// top : returns the top element of the stack.
// empty : returns true if the stack has 0 elements.
// Copyright (c) 1996 Microsoft Corporation. All rights reserved.
//////////////////////////////////////////////////////////////////////

#pragma warning(disable : 4786)

#include <stack>
#include <iostream>

#if _MSC_VER > 1020  // if VC++ version is > 4.2
    using namespace std; // std c++ libs implemented in std
#endif

typedef stack<int, deque<int>> STACK_INT;
void main()
{
    STACK_INT stack1;
    cout << "stack1.empty() returned " <<
        (stack1.empty() ? "true" : "false") << endl; // Function 3
    cout << "stack1.push(2)" << endl;
    stack1.push(2);

    if (!stack1.empty()) // Function 3
        cout << "stack1.top() returned " << stack1.top() << endl; // Function 1
    cout << "stack1.push(5)" << endl;
    stack1.push(5);

    if (!stack1.empty()) // Function 3
        cout << "stack1.top() returned " << stack1.top() << endl; // Function 1
    cout << "stack1.push(11)" << endl;
    stack1.push(11);

    if (!stack1.empty()) // Function 3
        cout << "stack1.top() returned " << stack1.top() << endl; // Function 1

    // Modify the top item. Set it to 6.
    if (!stack1.empty())
    { // Function 3
        cout << "stack1.top()=6;" << endl;
        stack1.top() = 6; // Function 1
    }

    // Repeat until stack is empty
    while (!stack1.empty())            // Function 3
    {
        const int &t = stack1.top(); // Function 2
        cout << "stack1.top() returned " << t << endl;
        cout << "stack1.pop()" << endl;
        stack1.pop();
    }
}