Classe stack
Una classe di adattatori di contenitori di modelli che fornisce una restrizione di funzionalità, limitando l'accesso all'elemento aggiunto più recentemente a un tipo di contenitore sottostante. La stack
classe viene usata quando è importante essere chiari che solo stack
le operazioni vengono eseguite nel contenitore.
Sintassi
template <class Type, class Container= deque <Type>>
class stack
Parametri
Type
Tipo di dati degli elementi da archiviare nello stack.
Container
Tipo del contenitore sottostante usato per implementare lo stack. Il valore predefinito è la classe deque<Type>
.
Osservazioni:
Gli elementi della classe Type
stipulati nel primo parametro modello di un oggetto stack sono sinonimi value_type
e devono corrispondere al tipo di elemento nella classe Container
contenitore sottostante stipulato dal secondo parametro di modello. Deve Type
essere assegnabile, in modo che sia possibile copiare oggetti di tale tipo e assegnare valori alle variabili di tale tipo.
Le classi contenitore sottostanti appropriate per lo stack includono deque
,list
classe evector
classe o qualsiasi altro contenitore di sequenza che supporta le operazioni di back
, push_back
e pop_back
. La classe del contenitore sottostante è incapsulata nell'adattatore di contenitori, che espone solo il set limitato di funzioni membro dei contenitori di sequenza come interfaccia pubblica.
Gli stack
oggetti sono equivalenti se e solo se gli elementi della classe Type
sono confrontabili e sono meno di paragonabili se e solo se gli elementi della classe Type
sono meno di paragonabili.
La
stack
classe supporta una struttura di dati LIFO (Last-In, First-Out). Una buona analogia è costituita da una pila di piatti. Gli elementi (piatti) possono essere inseriti, ispezionati o rimossi solo dalla cima della pila/stack, ovvero l'ultimo elemento alla fine del contenitore di base. La restrizione per accedere solo all'elemento principale è il motivo dell'uso dellastack
classe .La
queue
classe supporta una struttura di dati FIFO (First-In First-In, First-Out). Una buona analogia è costituita da persone in coda davanti allo sportello di una banca. Gli elementi (persone) possono essere aggiunti alla fine della fila e vengono rimossi dalla parte iniziale della fila. È possibile ispezionare sia l'inizio che la fine della fila. La restrizione per accedere solo agli elementi anteriori e posteriore in questo modo è il motivo per cui si usa laqueue
classe .La
priority_queue
classe ordina i relativi elementi in modo che l'elemento più grande sia sempre nella posizione superiore. Supporta l'inserimento di un elemento e l'ispezione e la rimozione del primo elemento. Una buona analogia è costituita da una fila di persone disposte in base a età, altezza o qualche altro criterio.
Membri
Costruttori
Nome | Descrizione |
---|---|
stack |
Costruisce un stack vuoto o che rappresenta una copia totale o parziale di un oggetto contenitore di base. |
Typedef
Nome | Descrizione |
---|---|
container_type |
Tipo che fornisce il contenitore di base che deve essere adattato da un oggetto stack . |
size_type |
Tipo Unsigned Integer in grado di rappresentare il numero di elementi di un stack . |
value_type |
Tipo che rappresenta il tipo di oggetto archiviato come elemento in stack . |
Funzioni
Nome | Descrizione |
---|---|
empty |
Verifica se stack è vuoto. |
pop |
Rimuove l'elemento dalla parte superiore di stack . |
push |
Aggiunge un elemento alla parte superiore di stack . |
size |
Restituisce il numero di elementi nel stack . |
top |
Restituisce un riferimento a un elemento nella parte superiore di stack . |
container_type
Tipo che fornisce il contenitore di base da adattare.
typedef Container container_type;
Osservazioni:
Il tipo è un sinonimo del parametro di modello Container
. Tutte e tre le classi contenitore della sequenza della libreria standard C++, ovvero la classe, list
la vector
classe e la classe deque
predefinita, soddisfano i requisiti da usare come contenitore di base per un stack
oggetto. È anche possibile usare tipi definiti dall'utente che soddisfano i requisiti.
Per altre informazioni su Container
, vedere la sezione Osservazioni dell'argomento stack
Classe .
Esempio
Vedere l'esempio per stack::stack
un esempio di come dichiarare e usare container_type
.
empty
Verifica se uno stack è vuoto.
bool empty() const;
Valore restituito
true
se lo stack è vuoto; false
se lo stack non èempty.
Esempio
// stack_empty.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
// Declares stacks with default deque base container
stack <int> s1, s2;
s1.push( 1 );
if ( s1.empty( ) )
cout << "The stack s1 is empty." << endl;
else
cout << "The stack s1 is not empty." << endl;
if ( s2.empty( ) )
cout << "The stack s2 is empty." << endl;
else
cout << "The stack s2 is not empty." << endl;
}
The stack s1 is not empty.
The stack s2 is empty.
pop
Rimuove l'elemento all'inizio dello stack.
void pop();
Osservazioni:
Per applicare la funzione membro, lo stack deve essere non vuoto. L'inizio dello stack è la posizione occupata dall'elemento aggiunto più di recente ed è l'ultimo elemento alla fine del contenitore.
Esempio
// stack_pop.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1, s2;
s1.push( 10 );
s1.push( 20 );
s1.push( 30 );
stack <int>::size_type i;
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
i = s1.top( );
cout << "The element at the top of the stack is "
<< i << "." << endl;
s1.pop( );
i = s1.size( );
cout << "After a pop, the stack length is "
<< i << "." << endl;
i = s1.top( );
cout << "After a pop, the element at the top of the stack is "
<< i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.
After a pop, the stack length is 2.
After a pop, the element at the top of the stack is 20.
push
Aggiunge un elemento all'inizio dello stack.
void push(const Type& val);
Parametri
val
Elemento aggiunto all'inizio dello stack.
Osservazioni:
L'inizio dello stack è la posizione occupata dall'elemento aggiunto più di recente ed è l'ultimo elemento alla fine del contenitore.
Esempio
// stack_push.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1;
s1.push( 10 );
s1.push( 20 );
s1.push( 30 );
stack <int>::size_type i;
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
i = s1.top( );
cout << "The element at the top of the stack is "
<< i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.
size
Restituisce il numero di elementi presenti nello stack.
size_type size() const;
Valore restituito
Lunghezza corrente dello stack.
Esempio
// stack_size.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1, s2;
stack <int>::size_type i;
s1.push( 1 );
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
s1.push( 2 );
i = s1.size( );
cout << "The stack length is now " << i << "." << endl;
}
The stack length is 1.
The stack length is now 2.
size_type
Tipo Unsigned Integer in grado di rappresentare il numero di elementi di uno stack.
typedef typename Container::size_type size_type;
Osservazioni:
Il tipo è un sinonimo del size_type
del contenitore di base adattato dallo stack.
Esempio
Vedere l'esempio per size
un esempio di come dichiarare e usare size_type
.
stack
Costruisce uno stack vuoto o che rappresenta una copia totale o parziale di una classe contenitore di base.
stack();
explicit stack(const container_type& right);
Parametri
right
Contenitore di cui lo stack costruito deve essere una copia.
Esempio
// stack_stack.cpp
// compile with: /EHsc
#include <stack>
#include <vector>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// Declares stack with default deque base container
stack <char> dsc1;
//Explicitly declares a stack with deque base container
stack <char, deque<char> > dsc2;
// Declares a stack with vector base containers
stack <int, vector<int> > vsi1;
// Declares a stack with list base container
stack <int, list<int> > lsi;
// The second member function copies elements from a container
vector<int> v1;
v1.push_back( 1 );
stack <int, vector<int> > vsi2( v1 );
cout << "The element at the top of stack vsi2 is "
<< vsi2.top( ) << "." << endl;
}
The element at the top of stack vsi2 is 1.
top
Restituisce un riferimento a un elemento all'inizio dello stack.
reference top();
const_reference top() const;
Valore restituito
Riferimento all'ultimo elemento del contenitore all'inizio dello stack.
Osservazioni:
Per applicare la funzione membro, lo stack deve essere non vuoto. L'inizio dello stack è la posizione occupata dall'elemento aggiunto più di recente ed è l'ultimo elemento alla fine del contenitore.
Se il valore restituito di top
viene assegnato a un const_reference
oggetto , l'oggetto stack
non può essere modificato. Se il valore restituito di top
viene assegnato a un reference
oggetto , l'oggetto stack
può essere modificato.
Esempio
// stack_top.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1;
s1.push( 1 );
s1.push( 2 );
int& i = s1.top( );
const int& ii = s1.top( );
cout << "The top integer of the stack s1 is "
<< i << "." << endl;
i--;
cout << "The next integer down is "<< ii << "." << endl;
}
The top integer of the stack s1 is 2.
The next integer down is 1.
value_type
Tipo che rappresenta il tipo di oggetto archiviato come elemento in uno stack.
typedef typename Container::value_type value_type;
Osservazioni:
Il tipo è un sinonimo del value_type
del contenitore di base adattato dallo stack.
Esempio
// stack_value_type.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
// Declares stacks with default deque base container
stack<int>::value_type AnInt;
AnInt = 69;
cout << "The value_type is AnInt = " << AnInt << endl;
stack<int> s1;
s1.push( AnInt );
cout << "The element at the top of the stack is "
<< s1.top( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the top of the stack is 69.
Vedi anche
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Informazioni di riferimento per la libreria standard C++