The stack
type is defined in the stack
header. The operations provided by a stack
are listed in Table 9.18. The following program illustrates the use of stack
:
stack<int> intStack; // empty stack
// fill up the stack
for (size_t ix = 0; ix != 10; ++ix)
intStack.push(ix); // intStackholds 0 ... 9 inclusive
while (!intStack.empty()) { // while there are still values in intStack
int value = intStack.top();
// code that uses value
intStack.pop(); // pop the top element, and repeat
}
The declaration
stack<int> intStack; // empty stack
defines intStack
to be an empty stack
that holds integer elements. The for
loop adds ten elements, initializing each to the next integer in sequence starting from zero. The while
loop iterates through the entire stack
, examining the top
value and pop
ping it from the stack
until the stack
is empty.
Each container adaptor defines its own operations in terms of operations provided by the underlying container type. We can use only the adaptor operations and cannot use the operations of the underlying container type. For example,
intStack.push(ix); // intStackholds 0 ... 9 inclusive
calls push_back
on the deque
object on which intStack
is based. Although stack
is implemented by using a deque
, we have no direct access to the deque
operations. We cannot call push_back
on a stack;
instead, we must use the stack
operation named push
.